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以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2010 Version 10.0.40219.1 SP1Rel Edition: Professional
- Microsoft .NET Framework Version 4.6.01055 SP1Rel
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))