Příklady REF CURSOR
Příklady REF CURSOR se skládají z následujících tří příkladů jazyka Microsoft Visual Basic, které demonstrují použití REF CURSORs.
Vzorek | Popis |
---|---|
Parametry REF CURSOR v čtečce OracleDataReader | Tento příklad spustí uloženou proceduru PL/SQL, která vrátí parametr REF CURSOR a přečte hodnotu jako OracleDataReader. |
Načítání dat z více typů REF CURSOR pomocí čtečky OracleDataReader | Tento příklad spustí uloženou proceduru PL/SQL, která vrátí dva parametry REF CURSOR a přečte hodnoty pomocí OracleDataReader. |
Naplnění datové sady pomocí jednoho nebo více typů REF CURSOR | Tento příklad spustí uloženou proceduru PL/SQL, která vrátí dva parametry REF CURSOR, a vyplní řádky, které jsou vráceny DataSet . |
Abyste mohli tyto příklady použít, možná budete muset vytvořit tabulky Oracle a musíte vytvořit balíček PL/SQL a tělo balíčku.
Vytvoření tabulek Oracle
Tyto příklady používají tabulky definované ve schématu Oracle Scott/Tiger. Schéma Oracle Scott/Tiger je součástí většiny instalací Oracle. Pokud toto schéma neexistuje, můžete k vytvoření tabulek a indexů používaných těmito příklady použít soubor příkazů SQL v aplikaci {OracleHome}\rdbms\admin\scott.sql.
Vytvoření balíčku Oracle a textu balíčku
Tyto příklady vyžadují následující balíček PL/SQL a tělo balíčku na vašem serveru. Na serveru Oracle vytvořte následující balíček 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;
/
Na serveru Oracle vytvořte následující text balíčku 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;
/