使用 INSERT...RETURNING 子句导致 ORA-12537
Using INSERT...RETURNING clause leads to 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
子句的相同查询显然很顺利。
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;";
我也有同样的问题,最初使用@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 ();
}
问题很简单,就像问题主题中所说的那样。我尝试使用 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
子句的相同查询显然很顺利。
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;";
我也有同样的问题,最初使用@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 ();
}