Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
| Ukázka | Popis |
|---|---|
| Parametry REF CURSOR v nástroji 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 REF CURSORů s využitím OracleDataReader | Tento příklad spustí uloženou proceduru PL/SQL, která vrátí dva parametry REF CURSOR a přečte hodnoty pomocí OracleDataReader. |
| Vyplnění datové sady pomocí jednoho nebo více ref cursors | Tento příklad spustí uloženou proceduru PL/SQL, která vrátí dva parametry REF CURSOR, a naplní DataSet řádky, které jsou vráceny. |
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í tělo 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;
/