SYS_REFCURSOR系統遊標的使用

lhrbest發表於2019-03-29


SYS_REFCURSOR系統遊標的使用


http://blog.itpub.net/26736162/viewspace-2131977/

 

1.1   函式返回系統遊標

CREATE OR REPLACE FUNCTION F_GET_SYS_REFCURSOR_LHR(P_EMPNO NUMBER) RETURN SYS_REFCURSOR IS
    CUR_SYS SYS_REFCURSOR;
  BEGIN
    OPEN CUR_SYS FOR
      SELECT LEVEL P_LEVEL,
             T.EMPNO,
             T.ENAME,
             T.MGR,
             (LPAD(' ', 6 * (LEVEL - 1)) || LEVEL || ':' || T.ENAME || '(' ||
             T.EMPNO || ')') NAME_ALL,
             SUBSTR(SYS_CONNECT_BY_PATH(T.ENAME, '=>'), 3) ALL_NAME_LEVEL,
             CONNECT_BY_ROOT(T.ENAME) ROOT,
             DECODE(CONNECT_BY_ISLEAF, 1, 'Y', 0, 'N') IS_LEAF
        FROM SCOTT.EMP T
       START WITH T.EMPNO=P_EMPNO
      CONNECT BY NOCYCLE MGR = PRIOR EMPNO;
    RETURN CUR_SYS;
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;
查詢:
SELECT F_GET_SYS_REFCURSOR_LHR(7566)  FROM   DUAL;

結果如下所示:



1.2   儲存過程返回系統遊標

1.2.1   單個表

CREATE OR REPLACE PROCEDURE PRO_GET_SYS_REFCURSOR_LHR(P_EMPNO NUMBER, SYS_CURSOR OUT SYS_REFCURSOR)    IS
     
  BEGIN
    OPEN SYS_CURSOR FOR
      SELECT *
        FROM SCOTT.EMP T
        WHERE T.EMPNO=P_EMPNO;
     
  END;
/
 
SET SERVEROUTPUT ON
DECLARE
    V_SYS_REFCURSOR_ROWS SYS_REFCURSOR;
    V_ROWS           SCOTT.EMP%ROWTYPE;
BEGIN
    PRO_GET_SYS_REFCURSOR_LHR(7369, V_SYS_REFCURSOR_ROWS); 
    LOOP
        FETCH V_SYS_REFCURSOR_ROWS
            INTO V_ROWS;
        EXIT WHEN V_SYS_REFCURSOR_ROWS%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(V_ROWS.EMPNO);
    END LOOP;
    CLOSE V_SYS_REFCURSOR_ROWS;
END;
/


1.2.2   多個表查詢

CREATE OR REPLACE PROCEDURE PRO_GET_SYS_REFCURSOR2_LHR(P_EMPNO    NUMBER,
                                                       SYS_CURSOR OUT SYS_REFCURSOR) IS
 
BEGIN
    OPEN SYS_CURSOR FOR
        SELECT A.EMPNO,B.DEPTNO,B.DNAME
        FROM   SCOTT.EMP  A,
               SCOTT.DEPT B
        WHERE  A.DEPTNO = B.DEPTNO
        AND    A.EMPNO = P_EMPNO;
 
END;
/
 
 
CREATE VIEW SCOTT.V_TMP  AS   
SELECT A.EMPNO,B.DEPTNO,B.DNAME
        FROM   SCOTT.EMP  A,
               SCOTT.DEPT B
        WHERE  A.DEPTNO = B.DEPTNO 
AND 1=2;
 
SELECT * FROM SCOTT.V_TMP;
 
DECLARE
    V_SYS_REFCURSOR_ROWS SYS_REFCURSOR;
    V_ROWS           SCOTT.V_TMP%ROWTYPE;
BEGIN
    PRO_GET_SYS_REFCURSOR2_LHR(7369, V_SYS_REFCURSOR_ROWS); 
    LOOP
        FETCH V_SYS_REFCURSOR_ROWS
            INTO V_ROWS;
        EXIT WHEN V_SYS_REFCURSOR_ROWS%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(V_ROWS.EMPNO||','||V_ROWS.DEPTNO);
    END LOOP;
    CLOSE V_SYS_REFCURSOR_ROWS;
END;






About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● weixin群:可加我weixin,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-03-01 06:00 ~ 2019-03-31 24:00 在魔都完成

● 最新修改時間:2019-03-01 06:00 ~ 2019-03-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2639781/,如需轉載,請註明出處,否則將追究法律責任。

相關文章