Module Module1
Sub Main()
Dim OraSession As New OracleInProcServer.OraSessionClass()
Dim OraDatabase As OracleInProcServer.OraDatabase
Dim Query As String = Nothing
' *******************************************
' 接続
' *******************************************
Try
OraDatabase = OraSession.OpenDatabase( _
"night/xe", _
"LB/LB", _
OracleInProcServer.dbOption.ORADB_DEFAULT _
)
Catch ex As Exception
Console.WriteLine(ex.Message)
' デバッグ用一時停止
Console.ReadLine()
Return
End Try
Query = "BEGIN DBMS_OUTPUT.ENABLE(); END;"
OraDatabase.ExecuteSQL(Query)
' 一時PL/SQL を SQL として実行
Query = "DECLARE WK_KEY VARCHAR2(4) := '0001';"
Query &= " WK_NAME VARCHAR2(50);"
Query &= " BEGIN"
Query &= " SELECT 氏名 INTO WK_NAME"
Query &= " FROM 社員マスタ"
Query &= " where 社員コード = WK_KEY;"
Query &= " DBMS_OUTPUT.PUT_LINE(WK_NAME);"
Query &= " END;"
' CrLf では動かないので、Lf に変換して実行
Query = Query.Replace(ControlChars.CrLf, ControlChars.Cr)
Call OraDatabase.ExecuteSQL(Query)
' DBMS_OUTPUT.GET_LINE の仕様に基づいてパラメータの設定
Call OraDatabase.Parameters.Add("PARAM", "", _
OracleInProcServer.paramMode.ORAPARM_OUTPUT)
OraDatabase.Parameters("PARAM").ServerType = _
OracleInProcServer.serverType.ORATYPE_VARCHAR2
Call OraDatabase.Parameters.Add("STATUS", 0, _
OracleInProcServer.paramMode.ORAPARM_OUTPUT)
OraDatabase.Parameters("STATUS").ServerType = _
OracleInProcServer.serverType.ORATYPE_NUMBER
' 結果を読みだす為のメソッドを実行
Query = "BEGIN DBMS_OUTPUT.GET_LINE(:PARAM,:STATUS); END;"
Call OraDatabase.ExecuteSQL(Query)
' メモリ上のデータを読み出し
Do While OraDatabase.Parameters("STATUS").Value = 0
' 表示
Console.WriteLine(OraDatabase.Parameters("PARAM").Value)
' 繰り返し
OraDatabase.ExecuteSQL(Query)
Loop
' パラメータの削除
Call OraDatabase.Parameters.Remove("STATUS")
Call OraDatabase.Parameters.Remove("PARAM")
' デバッグ用一時停止
Console.ReadLine()
End Sub
End Module