2017-01-24 10 views
0

問題は問題のトピックに記載されているように簡単です。私はINSERT...RETURNING節を使っていくつかのクエリを実行しようとしていますが、これを実行しようとするとORA-12537の例外が発生します。次のようにソースがある:最後の行のINSERT ... RETURNING句を使用するとORA-12537につながります

using (OracleCommand command = new OracleCommand()) { 
    command.Connection = connection; 
    command.BindByName = true; 
    command.CommandText = "INSERT INTO objects(name)VALUES(:objectName)RETURNING id INTO :objectId"; 
    command.Parameters.Add ("objectName", OracleDbType.Varchar2, ParameterDirection.Input); 
    command.Parameters.Add ("objectId", OracleDbType.Int64, ParameterDirection.Output); 
    command.ExecuteNonQuery(); 
} 

実行はOracleExceptionがメッセージORA-12537: Network Session: End of fileで提起されることにつながります。 RETURNINGサブセクションなしで同じクエリを実行すると、明らかにスムーズになります。

+4

誤植? 'objectId'パラメータを宣言する必要があります(' objectName'が宣言されたとき* 2回*) –

+0

ありがとう、それは私の質問を入力する間に入力したタイプミスです。それはソースにはありません。 –

+0

@ 0xdbそして、親切な感謝の気持ちを持っています。答えとして書いた方がいいですね。 –

答えて

1

OracleCommand.CommandTextプロパティは、実行するSQL文またはストアドプロシージャを設定します。
ORA-12537は情報メッセージであり、接続が切断されたことを意味します。これは、いくつかの理由、i.a. oracleはsql文を正しく実行できず、セッションを終了します。

は、PL/SQLブロックとしての代わりに、純粋なSQLコンテキストでステートメントを実行してください:

command.CommandText = @" 
    begin 
     insert into objects(name) values(:objectName) returning id into :objectId; 
    end;"; 
+0

ODP.NETがまだそれを行うことを許可していることを追加すると良いでしょう。つまり、BEGIN \ nINSERT INTOオブジェクト(name)VALUES( 'somename')のようなものを書いてください。id INTO:objectId; \ nEND; "出力パラメーターから戻り値を戻します。 –

関連する問題