次の方法で共有


REF CURSOR の例

REF CURSOR の例は、REF CURSOR の使用方法を示す次の 3 つの Microsoft Visual Basic の例で構成されています。

サンプル 説明
OracleDataReader の REF CURSOR パラメーター この例では、REF CURSOR パラメーターを返す PL/SQL ストアド プロシージャを実行し、値を OracleDataReaderとして読み取ります。
OracleDataReader を使用して複数の REF CURSOR からデータを取得する この例では、2 つの REF CURSOR パラメーターを返し、 OracleDataReader を使用して値を読み取る PL/SQL ストアド プロシージャを実行します。
1 つ以上の REF CURSOR を使用したデータセットの入力 この例では、2 つの REF CURSOR パラメーターを返す PL/SQL ストアド プロシージャを実行し、返された行を DataSet に入力します。

これらの例を使用するには、Oracle テーブルを作成する必要があり、PL/SQL パッケージとパッケージ本文を作成する必要があります。

Oracle テーブルの作成

これらの例では、Oracle Scott/Tiger スキーマで定義されているテーブルを使用します。 Oracle Scott/Tiger スキーマは、ほとんどの Oracle インストールに含まれています。 このスキーマが存在しない場合は、{OracleHome}\rdbms\admin\scott.sql の SQL コマンド ファイルを使用して、これらの例で使用されるテーブルとインデックスを作成できます。

Oracle パッケージとパッケージ本文の作成

これらの例では、サーバー上に次の PL/SQL パッケージとパッケージ本文が必要です。 Oracle サーバーに次の 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;  
/

Oracle サーバーに次の 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;  
/  

こちらも参照ください