Megosztás a következőn keresztül:


PÉLDÁK a REF CURSOR-ra

A REF CURSOR példák a következő három Microsoft Visual Basic-példából állnak, amelyek bemutatják a REF CURSORs használatát.

Minta Leírás
REF CURSOR Parameters in an OracleDataReader Ez a példa egy PL/SQL tárolt eljárást hajt végre, amely egy REF CURSOR paramétert ad vissza, és beolvassa az értéket OracleDataReader.
Adatok beolvasása több REF CURSOR-ből OracleDataReader használatával Ez a példa egy PL/SQL tárolt eljárást hajt végre, amely két REF CURSOR paramétert ad vissza, és egy OracleDataReader használatával olvassa be az értékeket.
Adathalmaz kitöltése egy vagy több REF CURSOR használatával Ez a példa egy PL/SQL tárolt eljárást hajt végre, amely két REF CURSOR paramétert ad vissza, és kitölti DataSet a visszaadott sorokat.

A példák használatához előfordulhat, hogy létre kell hoznia az Oracle-táblákat, és létre kell hoznia egy PL/SQL-csomagot és csomagtörzset.

Az Oracle-táblák létrehozása

Ezek a példák az Oracle Scott/Tiger sémában definiált táblákat használják. Az Oracle Scott/Tiger séma a legtöbb Oracle-telepítés részét képezi. Ha ez a séma nem létezik, az {OracleHome}\rdbms\admin\scott.sql SQL-parancsfájl használatával hozhatja létre a példákban használt táblákat és indexeket.

Az Oracle-csomag és -csomag törzsének létrehozása

Ezekhez a példákhoz a következő PL/SQL-csomag és csomagtörzs szükséges a kiszolgálón. Hozza létre a következő Oracle-csomagot az Oracle-kiszolgálón.

CREATE OR REPLACE PACKAGE CURSPKG AS
    TYPE T_CURSOR IS REF CURSOR;
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
                               IO_CURSOR IN OUT T_CURSOR);
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
                                DEPTCURSOR OUT T_CURSOR);  
END CURSPKG;  
/

Hozza létre a következő Oracle-csomag törzsét az Oracle-kiszolgálón.

CREATE OR REPLACE PACKAGE BODY CURSPKG AS  
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,  
                               IO_CURSOR IN OUT T_CURSOR)  
    IS
        V_CURSOR T_CURSOR;
    BEGIN
        IF N_EMPNO <> 0
        THEN  
             OPEN V_CURSOR FOR
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
                  FROM EMP, DEPT
                  WHERE EMP.DEPTNO = DEPT.DEPTNO
                  AND EMP.EMPNO = N_EMPNO;  
  
        ELSE
             OPEN V_CURSOR FOR
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
                  FROM EMP, DEPT
                  WHERE EMP.DEPTNO = DEPT.DEPTNO;  
  
        END IF;  
        IO_CURSOR := V_CURSOR;
    END OPEN_ONE_CURSOR;
  
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,  
                                DEPTCURSOR OUT T_CURSOR)  
    IS
        V_CURSOR1 T_CURSOR;
        V_CURSOR2 T_CURSOR;
    BEGIN
        OPEN V_CURSOR1 FOR SELECT * FROM EMP;  
        OPEN V_CURSOR2 FOR SELECT * FROM DEPT;  
        EMPCURSOR  := V_CURSOR1;
        DEPTCURSOR := V_CURSOR2;
    END OPEN_TWO_CURSORS;
END CURSPKG;  
/  

Lásd még