На самом деле, ваша техника верна.
sqlplus scott/tiger @script.sql "'index1','index2','index3'"
где script.sql:
Delete FROM table WHERE col IN (&1)
приведет к замене &1
дословно на 'index1','index2','index3'
, в результате чего sqlplus выполнит:
Delete FROM table WHERE col IN ('index1','index2','index3')
Проблема, которую я вижу, состоит в том, что оператор delete не заканчивается точкой с запятой, а скрипт не фиксирует / не завершает работу (возможно, они были исключены из вашего сообщения).
Следовательно, если ваша командная строка правильно интерполирует переменные окружения, то
set INDEXES = "'index1','index2','index3'"
sqlplus scott/tiger @script.sql %~INDEXES%
приводит к той же команде, что и первая в моем комментарии.
Простой способ увидеть, что sqlplus делает с параметрами командной строки, - это просто добавить prompt
в начало строки delete
в вашем скрипте:
prompt Delete FROM table WHERE col IN (&1)