Partilhar via


Exemplos de REF CURSOR

Os exemplos REF CURSOR são compostos pelos três exemplos do Microsoft Visual Basic a seguir que demonstram o uso de REF CURSORs.

Exemplo Description
Parâmetros REF CURSOR em um OracleDataReader Este exemplo executa um procedimento armazenado PL/SQL que retorna um parâmetro REF CURSOR e lê o valor como um OracleDataReaderarquivo .
Recuperando dados de vários CURSORs REF usando um OracleDataReader Este exemplo executa um procedimento armazenado PL/SQL que retorna dois parâmetros REF CURSOR e lê os valores usando um OracleDataReader.
Preenchendo um DataSet Usando um ou mais CURSORs REF Este exemplo executa um procedimento armazenado PL/SQL que retorna dois parâmetros REF CURSOR e preenche um DataSet com as linhas retornadas.

Para usar esses exemplos, talvez seja necessário criar as tabelas Oracle e criar um pacote PL/SQL e o corpo do pacote.

Criando as tabelas Oracle

Estes exemplos usam tabelas definidas no esquema Oracle Scott/Tiger. O esquema Oracle Scott/Tiger está incluído na maioria das instalações Oracle. Se esse esquema não existir, você poderá usar o arquivo de comandos SQL em {OracleHome}\rdbms\admin\scott.sql para criar as tabelas e índices usados por esses exemplos.

Criando o pacote Oracle e o corpo do pacote

Estes exemplos requerem o seguinte pacote PL/SQL e o corpo do pacote no seu servidor. Crie o seguinte pacote Oracle no servidor 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;  
/

Crie o seguinte corpo de pacote Oracle no servidor 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;  
/  

Consulte também