2017-01-24 42 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'被聲明瞭兩次時*) –

+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對象(名稱)VALUES('somename')的內容返回id INTO:objectId; \ nEND;」'並從輸出參數中獲取返回的值。 –

相關問題