Dela via


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

Se även