Condividi tramite


Esempi di REF CURSOR

Gli esempi REF CURSOR sono costituiti dai tre esempi di Microsoft Visual Basic seguenti che illustrano l'uso di REF CURSOR.

Esempio Descrizione
Parametri REF CURSOR in OracleDataReader In questo esempio viene eseguita una stored procedure PL/SQL che restituisce un parametro REF CURSOR e legge il valore come OracleDataReader.
Recupero di dati da più CURSOR REF tramite oracleDataReader In questo esempio viene eseguita una stored procedure PL/SQL che restituisce due parametri REF CURSOR e legge i valori usando oracleDataReader.
Compilazione di un set di dati con uno o più CURSOR REF In questo esempio viene eseguita una stored procedure PL/SQL che restituisce due parametri REF CURSOR e riempie un oggetto DataSet con le righe restituite.

Per usare questi esempi, potrebbe essere necessario creare le tabelle Oracle ed è necessario creare un pacchetto PL/SQL e il corpo del pacchetto.

Creazione delle tabelle Oracle

Questi esempi usano tabelle definite nello schema Oracle Scott/Tiger. Lo schema Oracle Scott/Tiger è incluso nella maggior parte delle installazioni Oracle. Se questo schema non esiste, è possibile usare il file dei comandi SQL in {OracleHome}\rdbms\admin\scott.sql per creare le tabelle e gli indici usati da questi esempi.

Creazione del pacchetto Oracle e del corpo del pacchetto

Questi esempi richiedono il pacchetto PL/SQL seguente e il corpo del pacchetto nel server. Creare il pacchetto Oracle seguente nel server Oracle.

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

Creare il corpo del pacchetto Oracle seguente nel server Oracle.

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

Vedere anche