문제

Oracle 10g에서 Pro * C를 실행합니다.

INSERT 문 값 절에서 하위 쿼리를 찾고 있습니다.이 SQL 쿼리는 완전히 유효하고 문제없이 Toad에서 실행되지만 Pro * C가 쿼리를 구문 분석하지 못합니다.

EXEC SQL INSERT INTO TARGET_ATTACHMENT 
      (
          TARGET_ID
          FILENAME
      ) 
      VALUES ( 
         :targetID,
         ( SELECT CREATED_FLAG from TARGET t where t.TARGET_ID = :targetID ) || '.tif'
      )
.

제거 :

( SELECT (CREATED_FLAG || DISPLAY_ID) from TARGET t where t.TARGET_ID = :targetID ) ||**". 
.

프로 * C 컴파일러가 작동하며 모든 것이 컴파일되어 예상대로 실행됩니다.

제거하지 않으면 : PRO * C 컴파일러는 구문 오류를 throw합니다.

1>Syntax error at line 128, column 12, file        d:\SVN\...\TA.pc:
1>Error at line 128, column 12 in file d:\SVN\...
1>...\TA.pc
1>                ( select CREATED_FLAG from target t where t.TARGET_ID = :targetID )
1>...........1
1>PCC-S-02201, Encountered the symbol "CREATED_FLAG" when expecting one of the fol
1>lowing:
1>   ( ) * + - / . @ | at, day, hour, minute, month, second, year,
.

프로 * C가 값이 칼로스 값 내의 하위 쿼리를 컴파일 할 수 있기를 기대하므로 다음과 같습니다.

IE.

INSERT into table1 (col1) values ( (select t2.singleCol from table2 t2 where t2.priKey = :priKey) )
.

은 PRO * C의 예상되는 동작입니다.또는 값 절 내의 하위 쿼리를 지원해야합니까?

도움이 되었습니까?

해결책

하위 쿼리를 다음과 같이 변경할 수 있습니다.

( SELECT CREATED_FLAG || '.tif' from TARGET t where t.TARGET_ID = :targetID ) 
.

나는 당신이 시도한 방식으로 하위 쿼리에 첨부 된 것을 본 적이 있다고 생각하지 않는다.

다른 팁

PRO * C 전처리자는 정적 SQL 문에서 구문 분석을 할 수 있습니다.예를 들어 명시 적 Per inner joiner / outer left join 등을 구문 분석 할 수 없습니다.

해결 방법은 SQL 문이 실제로 동적이 아닌 경우에도 동적 SQL 문을 준비하고 실행할 수 있습니다.

게시 한 코드는 다음과 논리적으로 동일합니다.

INSERT INTO TARGET_ATTACHMENT       
  ( TARGET_ID ,  FILENAME )      
 select    :targetID, CREATED_FLAG|| '.tif' 
 from TARGET t 
where t.TARGET_ID = :targetID ) 
.

값 절에서 스칼라 커서를 사용해야하는 특정 이유가 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top