Oracle10gでのPro*Cの実行。
挿入ステートメント値句内でサブクエリを実行しようとしています。この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 ) ||**".
Pro * Cコンパイラが動作し、すべてが期待どおりにコンパイルおよび実行されます。
削除しない場合:Pro*Cコンパイラは構文エラーをスローします。
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,
これは問題です。Pro*Cが値caluse内でサブクエリをコンパイルできることを期待しているからです。
すなわち。
INSERT into table1 (col1) values ( (select t2.singleCol from table2 t2 where t2.priKey = :priKey) )
これはPro*Cの予想される動作ですか?または、values句内のサブクエリをサポートする必要がありますか?