PL/SQL 側で、以下のように定義されたプロシージャを呼び出します
PROCEDURE PARAM_OUT_TEST
(
PM_STRING IN VARCHAR2,
PM_NUMBER OUT NUMBER
)
第一引数は、入力のみなので Direction の設定はしていません。第二引数は
入力はしませんが、出力するので Direction の設定をします。
※ Inpit、Output、InputOutput、ReturnValue があります
Imports System.Data
Imports System.Data.OracleClient
Module Module1
Sub Main()
' 新しい OracleConnection オブジェクトを作成
Dim myCon As OracleConnection = CreateConnection()
if myCon is Nothing then
Console.WriteLine("処理が異常終了しました")
Return
end if
'---------------------------------------------------
Dim myCommand As New OracleCommand()
myCommand.Connection = myCon
Dim myParam1 As OracleParameter
Dim myParam2 As OracleParameter
' *******************************************
' プロシージャの実行
' *******************************************
' 実行タイプ( ストアードプロシージャとして実行 )
myCommand.CommandType = CommandType.StoredProcedure
' プロシージャ名
myCommand.CommandText = "PARAM_OUT_TEST"
' パラメータクリア
myCommand.Parameters.Clear()
' 1つ目のパラメータ( IN なのでデータセット )
myParam1 = myCommand.Parameters.Add("PM_STRING", OracleType.VarChar)
myParam1.Value = "0010"
' 2つ目のパラメータ( OUT なので、Direction プロパティにセット )
myParam2 = myCommand.Parameters.Add("PM_NUMBER", OracleType.Number)
myParam2.Direction = ParameterDirection.Output
Try
' 結果を受け取り、後で処理する
myCommand.ExecuteNonQuery()
Catch ex As Exception
myCon.Close()
Console.WriteLine(ex.Message)
Return
End Try
' Decimal で返されている
Console.WriteLine(myParam2.Value.GetType())
Dim myValue As Decimal = myParam2.Value
Console.WriteLine(myValue)
'---------------------------------------------------
Call EndConnection( myCon )
End Sub
' ******************************************************
' 接続終了
' ******************************************************
Sub EndConnection( myCon As OracleConnection )
' 接続を閉じる
myCon.Close()
' OracleConnection オブジェクトに使用されているすべてのリソースを解放
myCon.Dispose()
' 処理終了
Console.WriteLine("処理が終了しました")
' 一時停止
Console.Write("Enterキーを押して下さい : ")
Console.ReadLine()
End Sub
' ******************************************************
' 接続作成
' ******************************************************
Function CreateConnection( ) As OracleConnection
' 新しい OracleConnectionStringBuilder オブジェクトを作成
Dim builder As New OracleConnectionStringBuilder()
' 接続用のパラメータを追加
builder.Add("Server", "light/xe")
builder.Add("User ID", "LIGHTBOX")
builder.Add("Password", "LIGHTBOX")
' 内容を確認
Console.WriteLine(builder.ConnectionString)
' 新しい OracleConnection オブジェクトを作成
Dim myCon As New OracleConnection()
' 接続文字列を設定
myCon.ConnectionString = builder.ConnectionString
' 接続を開く
Try
myCon.Open()
Catch ex As OracleException
Console.WriteLine("接続エラーです")
Console.WriteLine( ex.Message )
Return Nothing
End Try
Return myCon
End Function
End Module
Function の場合の戻り値の取得は以下のようにして記述できます
この場合、戻り値は最初に定義しますが、変数名は何でもいいです。
' パラメータクリア
myCommand.Parameters.Clear()
' 1つ目のパラメータ( 戻り値として )
myParam1 = myCommand.Parameters.Add("RET_VALUE", OracleType.Number)
myParam1.Direction = ParameterDirection.ReturnValue
' 2つ目のパラメータ( 第一引数として )
myParam2 = myCommand.Parameters.Add("PM_STRING", OracleType.Varchar)
myParam2.Value = "0001"
※ :を使って、SQL文内にバインド変数を埋め込む方法もあります
( CommandType.Text を使います )
コロン( : ) を使った場合の引数の処理 :サーバー側のカーソルを取得して使用する