--聲明 $cursor_name$ sys_refcursor --打開動態遊標 open $cursor_name$ is 查詢語句; --關閉遊標 close $cursor_name$; --聲明動態遊標類型 type $type_name$ is ref cursor; --聲明一個動態遊標變量 $v_cursor_name$ type_my_ref;
動態遊標能夠得到不一樣的結果集,能夠設置條件,返回不一樣的結果集,通常和過程一塊兒使用oop
--建立過程list create or replace procedure list(result_set in out sys_refcursor, which in number) is begin --打開動態遊標時在爲它指定查詢語句 --1就是返回員工表,其餘就返回部門表 if which=1 then open result_set for select * from employee; else open result_set for select * from department; end if; end; / --調用list過程,根據輸入的數字輸出某個表的所有信息 declare --聲明一個動態遊標類型 type type_my_ref is ref cursor; --聲明一個動態遊標變量 my_ref type_my_ref; emp employee%rowtype; dept department%rowtype; which number default &請輸入; begin --獲得一個查詢結果集 list(my_ref, which); loop if which=1 then /* handle employee */ fetch my_ref into emp; exit when my_ref%notfound; dbms_output.put_line(emp.empno||','||emp.ename||','||emp.job||','||emp.sal); else /* handle department */ fetch my_ref into dept; exit when my_ref%notfound; dbms_output.put_line(dept.deptno||','||dept.dname||','||dept.loc); end if; end loop; --close cursor close my_ref; end; /