次の方法で共有


REF CURSOR の例

更新 : November 2007

REF CURSOR の例は、REF CURSOR の使い方を説明する、次の 3 つの Microsoft Visual Basic の例によって構成されています。

サンプル

説明

OracleDataReader の REF CURSOR パラメータ

この例では、REF CURSOR パラメータを返し、OracleDataReader として値を読み込む PL/SQL ストアド プロシージャを実行します。

OracleDataReader を使用した複数の REF CURSOR からのデータの取得

この例では、2 つの REF CURSOR パラメータを返し、OracleDataReader を使用して値を読み込む PL/SQL ストアド プロシージャを実行します。

1 つまたは複数の REF CURSOR を使用した DataSet の値の設定

この例では、2 つの REF CURSOR パラメータを返し、返された行を DataSet に入力する PL/SQL ストアド プロシージャを実行します。

これらの例を使用するには、必要に応じて 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;
/

参照

その他の技術情報

Oracle REF CURSOR