[VB.NET]Oracleのストアドファンクションを実行

VB.NETからOracleのストアドファンクションを実行するための解説とサンプルコード

Oracle、ストアドファンクションのサンプルコード

入力の引数が2つ、出力の引数が1つ、戻り値がINT型のストアドファンクションです。
CREATE OR REPLACE FUNCTION "FUNCTION_TEST" (
                                    inParameter1  IN  DATE
                                   ,inParameter2  IN  VARCHAR2
                                   ,outParameter1 OUT VARCHAR2
                                    ) RETURN PLS_INTEGER IS
/*------------------------------------------------------------------------------
 FUNCTIONの呼び出しテスト
------------------------------------------------------------------------------*/
BEGIN

  outParameter1 := 'TEST';
  RETURN(1);

EXCEPTION
  -- 例外時
  WHEN OTHERS THEN
    outParameter1 := SQLERRM;
    RETURN(9);
END;

VB.NET、ストアドファンクション呼び出しのサンプルコード

OleDbCommandオブジェクトを生成し、ストアドの引数と戻り値に合わせてOleDbParameterオブジェクトを生成、登録します。 その際、リターン値 -> 引数1 -> 引数2…の順番で登録します。 登録後、ExecuteNonQueryメソッドを実行すると登録したOleDbParameterオブジェクトのValueプロパティにストアドからの戻り値がセットされます。

※ 接続文字列内のユーザーID、パスワード、ホスト名等は環境に合わせて修正してください

Imports System.Data.OleDb

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim connection As OleDbConnection = Nothing

    Try
        '引数に接続文字列を指定
        connection = New OleDbConnection("Provider=OraOLEDB.Oracle;User Id=ユーザーID;Password=パスワード;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ホスト名)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)));")

        '接続
        connection.Open()

        'ストアドファンクションの呼び出し

        'コマンド生成
        Dim command As OleDbCommand = connection.CreateCommand()
        'ストアドファンクションを呼び出すように指定
        Command.CommandType = CommandType.StoredProcedure
        '実行するストアドファンクションの名称
        command.CommandText = "FUNCTION_TEST"

        'RETURN(ストアドファンクションからの戻り値)の設定
        Dim returnValue As New OleDbParameter("return", OleDbType.Integer)
        returnValue.Direction = ParameterDirection.ReturnValue
        Command.Parameters.Add(returnValue)

        '1番目のINパラメータ
        Dim inParameter1 As OleDbParameter = New OleDbParameter("入力パラメータ1", OleDbType.Date)
        inParameter1.Value = DateTime.Now
        command.Parameters.Add(inParameter1)

        '2番目のINパラメータ
        Dim inParameter2 As OleDbParameter = New OleDbParameter("入力パラメータ2", OleDbType.VarChar)
        inParameter2.Value = "1"
        command.Parameters.Add(inParameter2)

        '3番目のOUTパラメータ
        Dim outParameter1 As New OleDbParameter("出力パラメータ1", OleDbType.VarChar, 256)
        outParameter1.Direction = ParameterDirection.Output
        Command.Parameters.Add(outParameter1)

        '実行
        Command.ExecuteNonQuery()

        '結果の表示
        MessageBox.Show(String.Format("return値=[{0}] out値=[{1}]", returnValue.Value, outParameter1.Value))

    Catch ex As Exception
        '接続失敗
        MessageBox.Show(ex.ToString, "接続エラー")
    Finally
        If connection IsNot Nothing Then
            '接続を閉じる
            connection.Close()
            connection = Nothing
        End If
    End Try
End Sub

サンプルコードのダウンロード

サンプルコードの実行には Microsoft Visual Studio 2010 以上のバージョンが必要です。 2010以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。

検証環境

関連ページ