有倆種方法:
一種是宣告系統游標,一種是宣告自定義游標,然後後面操作一樣,引數型別為
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;
Oracle儲存過程呼叫儲存過程
oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...
oracle動態呼叫 動態呼叫儲存過程
關鍵字 execute immediate sqlname using in 1 in 2 out c sql create or replace procedure p test a in varchar2,b in varchar2,c out varchar2 2 is 3 begin 4 c...
C 呼叫oracle儲存過程
建立oracle過程儲存 create or replace procedure proce test paramin in varchar2,paramout out varchar2,paraminout in out varchar2 asvarparam varchar2 28 begin ...