oracle存儲過程及函數中返回結果集(游標)


我建了一個包,包里一個存儲過程一個函數,都是以SCOTT這個示例下的EMP表為例的,然后再使用匿名塊對其進行調用並返回需要的結果。包里有另外多一個返回結果為數組類型的有一些問題,我們后面再繼續討論

包的內容如下:

create or replace package pkg_test1
as
type myrctype is ref cursor;
procedure get_emp(i_deptno emp.deptno%type,p_rc out myrctype);
function fun_emp(i_deptno emp.deptno%type) return myrctype;
type empinfo is record(
     empno emp.empno%type,
     ename emp.ename%type,
     deptno emp.deptno%type);
type emp_data is table of empinfo;

procedure get_row(i_empno emp.empno%type,aa out emp_data); 

end pkg_test1; 

 

create or replace package body pkg_test1
as
procedure get_emp(i_deptno emp.deptno%type,p_rc out myrctype)
is
sqlstr varchar2(500);
begin
       if i_deptno=0 then
         open p_rc for select * from emp;
       else
         sqlstr := 'select * from emp where deptno = :i_deptno';
         open p_rc for sqlstr using i_deptno;
       end if;
end get_emp;
function fun_emp(i_deptno emp.deptno%type) return myrctype
is
sqlstr varchar2(500);
rc myrctype;
begin
  if i_deptno=0 then
    open rc for select *  from emp;
  else
    sqlstr := 'select * from emp where deptno = :i_deptno';
    open rc for sqlstr using i_deptno;
  end if;
  return rc;
end fun_emp;
procedure get_row(i_empno emp.empno%type,aa out emp_data)
is
begin
      select empno,ename,deptno bulk collect into aa from emp where empno=i_empno;
      /*for i in aa.first..aa.last loop
          dbms_output.put_line(aa(i).empno||aa(i).ename||aa(i).deptno);
      end loop;*/
end get_row;

end pkg_test1; 

后面調用:

 declare

  aa sys_refcursor;

  bb sys_refcursor;

  lrow emp%rowtype; 

begin
    aa := pkg_test1.fun_emp(20);
    pkg_test1.get_emp(10,bb);
    loop
    exit when aa%notfound;
    FETCH aa INTO lrow;
    DBMS_OUTPUT.put_line (lrow.empno||' '||lrow.ename);
    end loop;
    CLOSE aa;     ---bb一樣用此方法顯示這些數據
    loop
    exit when bb%notfound;
    FETCH bb INTO lrow;
    DBMS_OUTPUT.put_line (lrow.empno||' '||lrow.ename);
    end loop;

    CLOSE bb; 

end;

 

但是在匿名塊中返回使用RECORD類型定義出來的多維數組類型,在調用的時候是不成功的,后來看到ITPUB里有個大哥的一段話,了解了,給出網址,供大家學習參考

http://www.itpub.net/thread-1326987-1-1.html,加油學習,嘿嘿~~~


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM