VBからストアドプロシジャを実行
VBからストアドプロシジャを実行すると、下記のエラーが発生します。
型 'System.InvalidOperationException' の初回例外が Oracle.DataAccess.dll で発生しました
オブジェクトの現在の状態に問題があるため、操作は有効ではありません。
テーブルとプロシジャはシステムユーザの管理下にあり、一般ユーザで接続しています。直接SQLを実行すると正しく動作しています。以下にコードを示しますが、どこに問題があるのでしょうか。システムユーザの管理下にある事より直接SQLを実行した時と同じ様に「system.xxx」としても結果は変わりませんでした。あと、一般ユーザにはconnectとselectの権限のみ与えています。
■VB側のコード
'オブジェクト
Dim oraCmd As New OracleCommand
'PL/SQLパラメタ
Dim oraPrm1 As OracleParameter
Dim oraPrm2 As OracleParameter
' 実行タイプ(PL/SQLとして実行)
oraCmd.CommandType = CommandType.StoredProcedure
' プロシージャ名
oraCmd.CommandText = "GETNAME"
' パラメータクリア
oraCmd.Parameters.Clear()
' 1つ目のパラメータ( IN なのでデータセット )
oraPrm1 = oraCmd.Parameters.Add("PM_STRING", OracleDbType.Varchar2)
oraPrm1.Value = "2001"
oraPrm1.Direction = ParameterDirection.Input
' 2つ目のパラメータ( OUT なので、Direction プロパティにセット )
oraPrm2 = oraCmd.Parameters.Add("PM_NUMBER", OracleDbType.Int16)
oraPrm2.Direction = ParameterDirection.Output
Try
' 結果を受け取り、後で処理する
oraCmd.ExecuteNonQuery()
Catch ex As Exception
conn.Close()
Console.WriteLine(ex.Message)
Return
End Try
Console.WriteLine(oraPrm2.Value.GetType())
■ストアドプロシジャ
CREATE OR REPLACE PROCEDURE GETNAME (IN1 IN NUMBER, OUT1 OUT VARCHAR2)
AS
BEGIN
select NAME INTO OUT1 from TEST where CODE = IN1;
END GETNAME;
お礼
ありがとうございました。 助かりました。
補足
Create or Replace ProcedureというSQL分(例えば、C:\DEL.SQLとします)は、作っているのですが、SQL*Plusで、どう入力すれば良いのですか? ちなみに、@SQL C:\DEL.SQL;と入力したらSQLがオープン出来ませんのメッセージが表示されます。