2017-01-24 5 views
0

문제는 해당 항목의 내용과 동일합니다. 내가 쿼리를 실행하려고하면 ORA-12537 예외가 발생하는 INSERT...RETURNING 절을 사용하여 쿼리를 실행하려고합니다. 다음과 같이 소스는 다음과 같습니다 마지막 줄의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

오타 : PL/SQL 블록으로 대신 순수한 SQL 컨텍스트에서 문을 실행하는

시도? 'objectId' 매개 변수를 선언해야합니다 ('objectName'을 선언 할 때 * 두 번 *) –

+0

예, 고마워요. 제 질문을 입력하는 동안 오타를 만들었습니다. 그것은 근원이 아닙니다. –

+0

@ 0xdb 그리고 친절한 선생님, 저에게 진심으로 감사드립니다 :) 당신이 대답으로 써 주시면 좋을 것 같습니다. –

답변

1

OracleCommand.CommandText 속성은 실행할 SQL 문이나 저장 프로 시저를 설정합니다.
ORA-12537은 정보 메시지 일 뿐이며 연결이 종료되었음을 의미합니다. 이것은 여러 가지 이유로 인해 발생할 수 있습니다. 오라클은 SQL 문을 올바르게 실행할 수 없으며 세션을 종료합니다.

command.CommandText = @" 
    begin 
     insert into objects(name) values(:objectName) returning id into :objectId; 
    end;"; 
+0

ODP.NET이 여전히 그렇게 할 수 있다고 덧붙이면 좋을 것입니다. 즉, "BEGIN \ nINSERT INTO objects (name) VALUES ('somename')와 같은 것을 작성하십시오. id INTO : objectId; \ nEND;" 반환 된 값을 출력 매개 변수에서 다시 가져옵니다. –