2017-01-24 39 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;”'并从输出参数中获取返回的值。 –

相关问题