こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLスクリプト内で、${変数}と記述しても値を認識できない?

USER.TABLE_LNK_TRG.shにて、トリガ作成スクリプトUSER.TABLE_LNK_TRG.sqlをコンパイルしようとしています。
USER.TABLE_LNK_TRG.shとUSER.TABLE_LNK_TRG.sqlともに
変数ORACLE_SID_1の値としてdb1、
変数ORACLE_SID_2の値としてdb2
が入っているはずなのですが、USER.TABLE_LNK_TRG.sql内では
${ORACLE_SID_1}と${ORACLE_SID_2}がそのまま文字列として解釈され
(変数の値であるdb1、db2にはならない)、コンパイルに失敗します。
逆にUSER.TABLE_LNK_TRG.sql内で、${ORACLE_SID_1}と${ORACLE_SID_2}
を使わず、直接db1、db2と記述すると成功します。
トリガ作成スクリプトUSER.TABLE_LNK_TRG.sql内で、${変数}は使えないのでしょうか?
環境はOSはSolaris、DBはOracle9i、シェルはBシェルです。
_______________________________________________________________
~USER.TABLE_LNK_TRG.sh~

#!/bin/sh
ORACLE_SID_1="db1"
ORACLE_SID_2="db2"
#トリガコンパイル
sqlplus aaa/aaa <<-EOF
@USER.TABLE_LNK_TRG.sql
quit
EOF
exit
______________________________________________________________
~USER.TABLE_LNK_TRG.sql~

CREATE OR REPLACE TRIGGER USER.TABLE_LNK_TRG
BEFORE UPDATE
ON USER.TABLE FOR EACH ROW
declare
begin
update TABLE@${ORACLE_SID_1}_lnk
set col = :new.col;
update TABLE@${ORACLE_SID_2}_lnk
set col = :new.col;
exception
when others then
null;
end;
/
_______________________________________________________________
※${ORACLE_SID_1}、${ORACLE_SID_2}のままコンパイルされるので、
 ${ORACLE_SID_1}_lnkのDB環境、${ORACLE_SID_2}_lnkのDB環境が存在せずコンパイルエラー。
 逆に直接db1、db2と記述するとdb1_lnkのDB環境、db2_lnkのDB環境が存在するので正常にコンパイル。

投稿日時 - 2006-11-05 13:33:47

QNo.2519171

すぐに回答ほしいです

質問者が選んだベストアンサー

シェルの変数展開は、そのとき読み込まれているシェルスクリプトにしか適用されませんので、SQLスクリプトファイル内に記述しても展開されません。

sqlplusの起動時引数で渡すとか、sedで置換したファイルを読み込むとかで対応しては。

投稿日時 - 2006-11-05 14:02:51

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問