VB.NETとPLSQLのREF CURSORでselectする

VB.NETとPLSQLのREF CURSORでselectするサンプルです。
REF CURSORを使用してデータを複数件取得します。

確認環境
・Microsoft Visual Studio Community 2019
・Oracle Express Edition 11g Release 2
・Oracle.ManagedDataAccess 19.5.0
・Windows 10

目次

VB.NETのコード

VB.NETのコードです。

Imports Oracle.ManagedDataAccess.Client

Public Class Class1
    ''' <summary>
    ''' VBからPLSQLのREF CURSORを取得する
    ''' </summary>
    Sub getDBtest1()
        Dim listA As New List(Of String)
        Dim connString As New String(
            "User Id=hr;Password=hr;Data Source=localhost/XE;")
        Using conn As New OracleConnection(connString)
            Dim cmd As New OracleCommand()
            Dim reader As OracleDataReader

            Try
                conn.Open()
                cmd.Connection = conn
                cmd.CommandText = "TEST_SYAIN_INFO.GET_SYAIN_INFO"
                cmd.CommandType = CommandType.StoredProcedure

                cmd.Parameters.Add(New OracleParameter(
                                   "ID1", OracleDbType.Int32)).Value = 1
                cmd.Parameters.Add(New OracleParameter(
                  "CURSOR1", OracleDbType.RefCursor)
                    ).Direction = ParameterDirection.Output

                '結果セットを返す
                reader = cmd.ExecuteReader()

                While (reader.Read())
                    listA.Add(reader("name"))
                End While
                reader.Close()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using

        For Each b In listA
            Console.WriteLine(b) 'nameが出力される
        Next
        Console.WriteLine("end")
    End Sub
End Class

9,10行目は、接続情報です。useridとパスワードとデータソースを指定しています。
11行目は接続です。
18,19行目は接続先のPLSQLを指定しています。
21行目は、送信する値です。数値の1を指定しています。
23行目は、受信する値です。OracleDbTypeとしてRefCursorを指定しています。
28行目のExecuteReaderメソッドで実行しています。
34行目は、例外が発生したときにcatchされて実行されます。
37行目のEnd Usingで接続はcloseします。

 

PLSQLの仕様部

PLSQLの仕様部のコードです。

CREATE OR REPLACE PACKAGE TEST_SYAIN_INFO
IS
/*
*  REF CURSORのテスト用
*/
TYPE CURSOR IS REF CURSOR;

PROCEDURE GET_SYAIN_INFO(
 ID1    IN   number,
 CURSOR1 OUT  CURSOR
);
END;

6行目は、REF CURSORを定義しています。
10行目は、変数CUROSOR1は、CURSOR型でOUTと定義しています。

 

PLSQLの本体部

PLSQLの本体部のコードです。

CREATE OR REPLACE PACKAGE BODY TEST_SYAIN_INFO
IS
/*
*  REF CURSORのテスト用
*/
PROCEDURE GET_SYAIN_INFO
(
ID1   IN   number,
CURSOR1 OUT  CURSOR
)
IS
  BEGIN
    OPEN CURSOR1 FOR
      select id,name,romaji from SYAIN;
--      where ID = ID1;
  END;
END;

14行目のSQLの実行結果が13行目のCURSOR1にセットされます。
9行目でCURSOR1はOUTなので結果を返します。

関連の記事

VB.NET Oracle11gに接続してselectするサンプル

△上に戻る