Sdílet prostřednictvím


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

Viz také