Udostępnij za pośrednictwem


Przykłady REF CURSOR

Przykłady kursora REF składają się z następujących trzech przykładów języka Microsoft Visual Basic, które demonstrują użycie reguł REF CURSORs.

Przykład opis
Parametry kursora REF CURSOR w OracleDataReader W tym przykładzie jest wykonywana procedura składowana PL/SQL, która zwraca parametr REF CURSOR i odczytuje wartość jako OracleDataReader.
Pobieranie danych z wielu kursorów REF CURSOR przy użyciu OracleDataReader W tym przykładzie jest wykonywana procedura składowana PL/SQL, która zwraca dwa parametry KURSORa REF i odczytuje wartości przy użyciu elementu OracleDataReader.
Wypełnianie zestawu danych przy użyciu przynajmniej jednego kursora REF CURSOR W tym przykładzie jest wykonywana procedura składowana PL/SQL, która zwraca dwa parametry KURSORa REF, i wypełnia DataSet element wierszami, które są zwracane.

Aby użyć tych przykładów, może być konieczne utworzenie tabel Oracle i utworzenie pakietu PL/SQL i treści pakietu.

Tworzenie tabel Oracle

W tych przykładach użyto tabel zdefiniowanych w schemacie Oracle Scott/Tiger. Schemat Oracle Scott/Tiger jest dołączony do większości instalacji Oracle. Jeśli ten schemat nie istnieje, możesz użyć pliku poleceń SQL w folderze {OracleHome}\rdbms\admin\scott.sql, aby utworzyć tabele i indeksy używane przez te przykłady.

Tworzenie pakietu Oracle i treści pakietu

Te przykłady wymagają następującego pakietu PL/SQL i treści pakietu na serwerze. Utwórz następujący pakiet Oracle na serwerze 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;  
/

Utwórz następującą treść pakietu Oracle na serwerze 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;  
/  

Zobacz też