SQL * plus неправильно маркирует свои аргументы командной строки, когда путь к программе содержит пробелы - PullRequest
6 голосов
/ 19 сентября 2011

Я использую SQL * Plus со следующей командной строкой:

sqlplus user/pw@TNS @test.sql foo

Содержимое test.sql следует:

SET VERIFY ON
DEFINE argone='&&1'
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode

Результаты:

  • Когда исполняемый файл SQL * Plus находится в C:\Program Files\Oracle Client\whatever\sqlplus.exe, тогда &&1 оценивается в Files\Oracle.
  • Когда исполняемый файл SQL * Plus находится в C:\Oracle\Client\10.2.xx\bin, тогда &&1 оценивается в foo.

Кто-нибудь сталкивался с этой проблемой и имел способ обойти ее?

1 Ответ

2 голосов
/ 19 сентября 2011

Вам потребуется использовать двойные кавычки как в командной строке, так и в операторе define, чтобы правильно захватить аргументы с пробелами.

Сценарий:

SET VERIFY ON
DEFINE argone="&&1"
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode

Командная строка:

sqlplus user/pw@TNS @test.sql "foo bar"
...