2016年10月6日木曜日

[Oracle] SQL*Plusで引数にIN句の条件を渡す方法

SQL*Plusで、引数を以下SQLファイルに渡したい、という要件が
発生したので調査を行いました。

・test.sql
SELECT * FROM table WHERE column IN (/*ここを引数として渡したい*/);
exit;


色々試した結果、以下のような形で実行できることを確認。

・test.sql
SELECT * FROM table WHERE column IN (&1);
exit;

・sqlplus実行
sqlplus user/pass@db @test.sql " 'arg1','arg2','arg3'"


仕様がよくわかりませんが、水色部分に
何らかの文字がないとエラーになるようです。
# 状況によってはスペースを「N」に置き換えても実行可能

こんな微妙なことをする機会は今後なさそうですが、念のため覚書。