Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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;
/