SQLの窓

2011年10月14日


VB.net : PL/SQL の OUT パラメータから実行結果を取得する

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 を使います )

コロン( : ) を使った場合の引数の処理 :サーバー側のカーソルを取得して使用する



タグ:PL/SQL
posted by lightbox at 2011-10-14 22:38 | VB.NET : データベース | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり