一番重要なのは、PL/SQL の改行コードに CRLF の CR を含めない事です。 :変数名 でバインドさせると、自動的に PL/SQL 側で変数として定義されます ここでは、テストの為に ParameterDirection.InputOutput を使っていますが、 入力データはもともと PL/SQL がテキストなので、文字列を置き換えて実行する 方法もあります。 関連する記事 http://logicalerror.seesaa.net/article/228467533.html もっと言えば、PL/SQL 側の動的 PL/SQL を使わないでも比較的簡単に 動的な SQL の実行が可能です。むしろ、パーツ化してマクロ化してしまえばより便利 になると思います。
DECLARE WK_STRING VARCHAR2(50); BEGIN WK_STRING := :RET_VALUE; DBMS_OUTPUT.PUT_LINE(:RET_VALUE); UPDATE 社員マスタ SET 氏名 = :RET_VALUE WHERE 社員コード = '0001'; DBMS_OUTPUT.PUT_LINE(WK_STRING); :RET_VALUE := '最終値'; END;
Imports System.Data
Imports System.Data.OracleClient
Imports System.IO
Imports System.Text
Module Module1
Sub Main()
' 新しい OracleConnection オブジェクトを作成
Dim myCon As OracleConnection = CreateConnection()
if myCon is Nothing then
Console.WriteLine("処理が異常終了しました")
Return
end if
'---------------------------------------------------
' キャラクタセット
Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
' 読み込み用
' plsql.sql は、改行コードを LF のみにして下さい
Dim ReadFile As StreamReader = New StreamReader( "plsql.sql", SJIS_Enc )
' SHIFT_JIS で読み込み
Dim SqlText As String = ReadFile.ReadToEnd()
ReadFile.Close()
Dim myCommand As New OracleCommand()
myCommand.Connection = myCon
Dim myParam1 As OracleParameter
' *******************************************
' プロシージャの実行
' *******************************************
' 実行タイプ( SQLとして実行 )
myCommand.CommandType = CommandType.Text
' プロシージャ名
myCommand.CommandText = SqlText
' パラメータクリア
myCommand.Parameters.Clear()
' 内容を取得する変数用パラメータ( OUT なので、Direction プロパティにセット )
myParam1 = myCommand.Parameters.Add("RET_VALUE", OracleType.Varchar)
myParam1.Direction = ParameterDirection.InputOutput
myParam1.Size = 50 ' 長さ
myParam1.Value = "山田 太郎"
Try
' 結果を受け取り、後で処理する
myCommand.ExecuteNonQuery()
Catch ex As Exception
myCon.Close()
Console.WriteLine(ex.Message)
Return
End Try
Console.WriteLine(myParam1.Value)
'---------------------------------------------------
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
|
|
【VB.NET : データベースの最新記事】
- VB.net : GetSchema メソッドでデータベース内のテーブル一覧と指定したテーブルの列名一覧を取得する
- VB.net : ListView に DB から読み込んだデータをセットする
- VB.net : 一時 PL/SQL で Data Pump Exportユーティリティと同じデータをエクスポートして処理結果を取得する
- VB.net : PL/SQL の OUT パラメータから実行結果を取得する
- VB.net : ODBC + MySQL で CSV をインポート( クラス化サンプル )
- VB.net : CSVによるインポート用ファイルの作成( つまりエクスポート )
- VB.net : insert 構文によるインポート用ファイルの作成( つまりエクスポート )
- VB.net 2008 : System.Data.Odbc データ取得(SELECT)処理( MySQL 5.1 )
- VB.net 2008 : System.Data.Odbc 更新処理( MySQL 5.1 )
- VB.net 2008 : System.Data.Odbc 接続テスト( MySQL 5.1 )
- VB.net : Oracle の行を返さない SQL の実行






