2012-12-29 5 views
0

내 코드의 잘못된 이름/번호 : 변수의 잘못된 이름/번호 :오라클 쿼리의 매개 변수입니다. 변수

oracleCom.CommandText = @"declare P_ID tbl_objects.i_id%TYPE; 
          BEGIN 
          UPDATE tbl_objects 
          SET i_status_id = 234 
          WHERE s_code = '" + objectsChanged[j] + 
          @"' RETURNING i_id INTO P_ID; 
           :param_id := P_ID; 
          END;"; 
oracleCom.Parameters.Add("param_id", OracleType.Number).Direction = ParameterDirection.Output; 
try 
{ 
    oracleCom.ExecuteNonQuery(); 
} 
catch 
{----------} 

컴파일러는 오류를 생성합니다. 하지만이 SQL을 pl/sql 개발자가 사용할 때 제대로 작동합니다. 제대로

이 코드가 작동 :

OracleCommand oracleCom = new OracleCommand 
{ 
    Connection = oraConnect, 
    CommandText = @"declare P_ID tbl_objects.i_id%TYPE; 
        BEGIN insert into tbl_objects 
           (s_code, i_status_id) 
           values 
           (:s_code, 234) 
         RETURNING I_ID INTO :p_id; 
        END;" 
}; 
+0

런타임 오류와 달리 컴파일러 오류 인 경우 PL/SQL 문자열에 문제가있는 것과 달리 Java 코드에 문제가 있음을 의미합니다. 컴파일러가 나타내는 줄에 오류가 있습니까? –

+0

PL/DEVELOPER에서 올바르게 작동합니다. – user1848942

답변

0

OracleCommand 여러 선으로 저장 프로 시저를 처리 할 수 ​​없습니다. CommandText을 한 줄로 변경해야합니다. (그냥 모든 새 줄을 제거하십시오).

개인적으로 새 줄을 공백으로 바꾸는 방법이있어서 형식화 된 명령을 저장할 수는 있지만 OracleCommand에 넣기 전에 줄을 "평평하게"합니다.

+0

질문 끝 부분에 추가 한 코드가 올바르게 작동합니다. – user1848942

0

사소한 실수 일 수 있습니다. 대신에 :

:param_id = P_ID; 

이 있어야한다 :

:param_id := P_ID; 

(할당 대신 항등 연산자).

+0

이 줄을 수정했습니다. 그러나 그것은 나를 돕지 않았다. – user1848942

관련 문제