3

问题很简单,如问题主题中所述。我尝试使用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 被 message 引发ORA-12537: Network Session: End of fileRETURNING在没有子句的情况下运行相同的查询显然很顺利。

4

2 回答 2

4

OracleCommand.CommandText属性设置要执行的 SQL 语句或存储过程。
ORA-12537 只是一条信息消息,表示连接已关闭。这可能是由多种原因引起的,ia oracle 无法正确执行 sql 语句并终止会话。

尝试将语句作为 pl/sql 块而不是在纯 sql 上下文中执行:

command.CommandText = @"
    begin 
        insert into objects(name) values(:objectName) returning id into :objectId; 
    end;";
于 2017-01-24T22:06:54.807 回答
2

我也有同样的问题,最初使用@0xdb 解决方案并且它有效。然后,我发现ParameterDirection应该是ReturnValue而不是Output并且一切正常。

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.ReturnValue);
    command.ExecuteNonQuery ();
}
于 2019-04-26T16:29:48.973 回答