Oracle Proc 삽입 값 ((선택 ...))
-
13-12-2019 - |
문제
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 )
.
값 절에서 스칼라 커서를 사용해야하는 특정 이유가 있습니까?
제휴하지 않습니다 StackOverflow