oracle學習筆記(二十二) REF 動態遊標

動態遊標

定義語法

--聲明
$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;
/
相關文章
相關標籤/搜索