回覆列表
  • 1 # 使用者1982913760599

    有倆種方法: 一種是宣告系統遊標,一種是宣告自定義遊標,然後後面操作一樣,引數型別為 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 as type 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;

  • 中秋節和大豐收的關聯?
  • 用友財務軟體中憑證做錯了結賬了怎麼修改,急!急?