REFERENSMARKÖRexempel
REF CURSOR-exemplen består av följande tre Microsoft Visual Basic-exempel som demonstrerar användning av REF CURSORs.
Exempel | beskrivning |
---|---|
REFERENSMARKÖRparametrar i en OracleDataReader | Det här exemplet kör en PL/SQL-lagrad procedur som returnerar en REF CURSOR-parameter och läser värdet som en OracleDataReader. |
Hämta data från flera REF CURSORs med hjälp av en OracleDataReader | Det här exemplet kör en PL/SQL-lagrad procedur som returnerar två REF CURSOR-parametrar och läser värdena med hjälp av en OracleDataReader. |
Fylla i en datauppsättning med hjälp av en eller flera REF CURSORs | Det här exemplet kör en PL/SQL-lagrad procedur som returnerar två REF CURSOR-parametrar och fyller en DataSet med de rader som returneras. |
Om du vill använda de här exemplen kan du behöva skapa Oracle-tabellerna och du måste skapa ett PL/SQL-paket och pakettext.
Skapa Oracle-tabeller
I de här exemplen används tabeller som definieras i Oracle Scott/Tiger-schemat. Oracle Scott/Tiger-schemat ingår i de flesta Oracle-installationer. Om det här schemat inte finns kan du använda SQL-kommandofilen i {OracleHome}\rdbms\admin\scott.sql för att skapa de tabeller och index som används i dessa exempel.
Skapa Oracle-paketet och pakettexten
De här exemplen kräver följande PL/SQL-paket och pakettext på servern. Skapa följande Oracle-paket på Oracle-servern.
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;
/
Skapa följande Oracle-pakettext på Oracle-servern.
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;
/