ハマったのでメモ。
こんな3つのスクリプトがあるとする。
--first_script.sql START second_script.sql "TODAY IS" '&1' START third_script.sql '&1' "IS TODAY"
--second_script.sql echo '&1' '&2'
--therd_script.sql echo '&1' '&2'
で、 ↓のようにコマンドを叩いたとき、
START first_script.sql "20240120"
こういう結果を期待していた。
--second_script.sqlの結果 TODAY IS 20240120 --&1がTODAY ISで、&2が親スクリプトに渡した引数 --third_script.sqlの結果 20240120 IS TODAY --&1が親スクリプトに渡した引数で、&2がIS TODAY
が、やってみるとこうなってしまった。
--second_script.sqlの結果 TODAY IS 20240120 --second_script.sqlの結果 TODAY IS IS TODAY
なぜこうなってしまうのかというと、
second_script.sqlを呼び出したときに、&1が、
second_script.sqlの&1であるTODAY ISに上書きされてしまうらしい。
親スクリプトを呼び出した時の&1は引き継がれない。
これを回避するには、親スクリプトを呼び出したときの&1を共通変数にして、
secondとthirdではそれを参照するようにすればよい。
--first_script.sql DEFINE my_variable = '&1' START second_script.sql "TODAY IS" START third_script.sql "IS TODAY"
--second_script.sql SET SERVEROUTPUT ON echo '&1' '&my_variable'
--therd_script.sql SET SERVEROUTPUT ON echo '&my_variable' '&1'