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