Delen via


VOORBEELDEN VAN VERW CURSOR

De REF CURSOR-voorbeelden bestaan uit de volgende drie Microsoft Visual Basic-voorbeelden die laten zien hoe u REF CURSOR's gebruikt.

Voorbeeld Beschrijving
REF CURSOR-parameters in een OracleDataReader In dit voorbeeld wordt een PL/SQL-opgeslagen procedure uitgevoerd die een REF CURSOR-parameter retourneert en de waarde leest als een OracleDataReader.
Gegevens ophalen uit meerdere REF CURSORs met behulp van een OracleDataReader In dit voorbeeld wordt een PL/SQL-opgeslagen procedure uitgevoerd die twee REF CURSOR-parameters retourneert en de waarden leest met behulp van een OracleDataReader.
Een gegevensset invullen met een of meer REF-CURSORs In dit voorbeeld wordt een PL/SQL-opgeslagen procedure uitgevoerd die twee REF CURSOR-parameters retourneert en een DataSet met de rijen vult die worden geretourneerd.

Als u deze voorbeelden wilt gebruiken, moet u mogelijk de Oracle-tabellen maken en moet u een PL/SQL-pakket en pakkettekst maken.

De Oracle-tabellen maken

In deze voorbeelden worden tabellen gebruikt die zijn gedefinieerd in het Oracle Scott/Tiger-schema. Het Oracle Scott/Tiger-schema is opgenomen in de meeste Oracle-installaties. Als dit schema niet bestaat, kunt u het BESTAND met SQL-opdrachten gebruiken in {OracleHome}\rdbms\admin\scott.sql om de tabellen en indexen te maken die door deze voorbeelden worden gebruikt.

Het Oracle-pakket en de hoofdtekst van het pakket maken

Voor deze voorbeelden is het volgende PL/SQL-pakket en de hoofdtekst van het pakket op uw server vereist. Maak het volgende Oracle-pakket op de Oracle-server.

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;  
/

Maak de volgende Oracle-pakketbody op de Oracle-server.

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;  
/  

Zie ook