請問Oracle儲存過程如何返回游標?

2021-08-31 05:07:14 字數 1910 閱讀 4980

有倆種方法:

一種是宣告系統游標,一種是宣告自定義游標,然後後面操作一樣,引數型別為

in out 或out

(1)宣告個人系統游標.(推薦)

create or replace p_temp_procedure

(cur_arg out sys_refcursor; --方法1

)begin

open cur_arg for select * from tablename;

end呼叫

declare

cur_calling sys_refcursor;

begin

p_temp_procedure(cur_calling); --這樣這個游標就有值了

for rec_next in cur_calling loop

....

end loop;

end;

(2)在包頭中申明乙個遊表型別,然後呼叫者申明乙個這個型別的游標變數,傳給返回游標的儲存過程 ,儲存過程out這個結果集,這種方法很麻煩.游標型別不能像索引表一樣使用create or replace type方法來建立,所以只能在包中申明,並且需要使用/來執行,後面的儲存過程才認這個游標型別.(不推薦,但是建議要知道並且要會這種方式,畢竟它有它存在的道理)

--定義全域性變數

create or replace package pkg_package

astype type_cursor is ref cursor;

type type_record is record

(test01 varchar2(32),

test02 varchar2(32),

test03 varchar2(32)

);end;

/--建立返回游標的儲存過程

create or replace procedure p_temp_procedure

(cur_out_arg out pkg_package.type_cursor)is

begin

open cur_out_arg for select * from test;

end;

/--呼叫方法一

declare

cur_out_arg pkg_package.type_cursor;

rec_arg pkg_package.type_record;

begin

p_temp_procedure(cur_out_arg);

fetch cur_out_arg into rec_arg;

dbms_output.put_line(rec_arg.test01);

dbms_output.put_line(rec_arg.test02);

dbms_output.put_line(rec_arg.test03);

end;

-- 呼叫方法二

--呼叫

declare

cur_out_arg pkg_package.type_cursor;

rec_arg pkg_package.type_record;

begin

dbms_output.put_line('------------------------');

p_temp_procedure(cur_out_arg);

loop

fetch cur_out_arg into rec_arg;

exit when cur_out_arg%notfound;

dbms_output.put_line(rec_arg.test01||' '||rec_arg.test02||' '||rec_arg.test03);

end loop;

end;

mybatis呼叫Oracle儲存過程返回結果集

在開發中,有時需要關聯幾張表來進行一些複雜的計算,此時可採用建立一張臨時表,將每次的資料計算後先存入臨時表,然後通過oracle的游標返回。在mybatis中的呼叫如下 呼叫語法格式,需要構造乙個resultmap,用來接收返回的結果集 在service層呼叫如下 在service層呼叫,out v...

如何開發ORACLE儲存過程

在我的上乙個銀行專案中,我接到編寫oracle儲存過程的任務,我是程式設計師,腦袋裡只有一些如何使用callable介面呼叫儲存過程的經驗,一時不知如何下手,我查閱了一些資料,通過實踐發現編寫oracle儲存過程是非常不容易的工作,即使上路以後,除錯和驗證非常麻煩。簡單地講,oracle儲存過程就是...

如何開發ORACLE儲存過程

一.概述 oracle儲存過程開發的要點是 使用notepad文字編輯器,用oracle pl sql程式語言寫乙個儲存過程 在oracle資料庫中建立乙個儲存過程 在oracle資料庫中使用sql plus工具執行儲存過程 在oracle資料庫中修改儲存過程 通過編譯錯誤除錯儲存過程 刪除儲存過程...