2017-01-24 9 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

Typo? Вы должны объявить параметр ': objectId' (когда' objectName' было объявлено * дважды *) –

+0

Да, спасибо, это опечатка, которую я сделал при наборе моего вопроса. Это не в источнике. –

+0

@ 0xdb И вы, добрый сэр, примите мою искреннюю благодарность :) Было бы неплохо, если бы вы написали это как ответ. –

ответ

1

OracleCommand.CommandText свойство задает инструкцию SQL или хранимую процедуру для выполнения.
ORA-12537 является информационным сообщением и означает, что соединение было закрыто. Это может быть вызвано рядом причин, т.е. 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') RETURNING id INTO: objectId; \ nEND; "' и вернуть возвращаемое значение из выходного параметра. –