Когда я передаю имя для файла спула, я получаю неправильное имя файла. Например, я дважды нажимаю command.bat и в командной строке введите «TEST» (без кавычек) и нажмите enter. Скрипт запускает и запрашивает эту базу данных правильно, но мой выходной файл - «TESTcsv.LST» (опять же без кавычек). Если я изменю имя файла на правильный «TEST.csv», я вижу, что результат правильный.Передача имени файла спула SQL-скрипту в качестве параметра из командного файла - неожиданное поведение
command.bat:
@echo off
SET /P name="Enter name: "
sqlplus username/password @script.sql %name%
script.sql:
--A whole bunch of formatting code
...
spool T:\&1.csv
SELECT * FROM tablename WHERE somecol='&1';
spool off
exit
Кроме того, если я изменю sqlscript следующим образом:
spool T:\'&1'.csv
Мой выходной файл становится 'TEST' .csv. Когда я оставляю одиночные кавычки, почему он удаляет '.' в имени файла спула и добавить «.LST»?
Обратите внимание, что параметр, передаваемый скрипту, также используется в запросе без каких-либо проблем.
Я также пробовал передавать аргументы с помощью утилиты sqlcmd, но мне не повезло, поэтому я бы хотел, чтобы это работало без sqlcmd, если это было возможно. На данный момент я могу переименовать файл, но это немного раздражает, когда приходится делать это каждый раз, когда мне нужно запустить скрипт.
Если я редактирую команду катушки, чтобы быть 'золотник T: \ & 1..csv', я получаю правильный выходной файл. Если кто-нибудь скажет мне, почему второй «.» необходимо было бы оценить. Благодарю. –
'&' - способ поместить две команды в одну строку. 'dir & set'. Это специальная команда. Закрытие в двойных кавычках или экранирование с помощью каретки. 'Скопируйте файл c: \ file^&. Txt' или' copy con 'и .txt ''. –
@Noodles В этом случае '&' является частью SQL-скрипта, а не командной строки. Это просто первый аргумент, передаваемый SQL Script. Проблема заключается в том, что в SQL-запросе параметр отображается правильно, но в команде spool его нет. –