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