Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os exemplos REF CURSOR são compostos pelos três exemplos do Microsoft Visual Basic a seguir que demonstram o uso de CURSORs REF.
| Amostra | Descrição |
|---|---|
| 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 OracleDataReader. |
| 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 conjunto de dados 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 um corpo do pacote.
Criando as tabelas Oracle
Esses exemplos usam tabelas definidas no esquema Oracle Scott/Tiger. O esquema Oracle Scott/Tiger está incluído na maioria das instalações da Oracle. Se esse esquema não existir, você poderá usar o arquivo de comandos SQL no {OracleHome}\rdbms\admin\scott.sql para criar as tabelas e índices usados por esses exemplos.
Criando o pacote Oracle e o corpo do pacote
Esses exemplos exigem o seguinte pacote PL/SQL e o corpo do pacote em 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 do 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;
/