Запускать команды sqlplus из нескольких файлов с ведением журнала запросов или буферизацией в пакетном файле Windows - PullRequest
0 голосов
/ 01 ноября 2019

Я новичок в пакетном скриптинге и пытаюсь запустить несколько файлов sql, которые, в свою очередь, могут содержать несколько запросов sql DML / DDL из файла bat. Выходные файлы должны содержать все выполняемые запросы и выходные данные запроса. В отличие от этого примера , у меня нет команды спула внутри моего файла sql, и я не могу редактировать входные файлы sql. Следующая команда работает для меня в ksh-файле (спасибо здесь-документу):

$sqlplus  /nolog <<! >>$sqlLogs.lst
connect $USERNAME/$PASSWORD@${DBNAME}
set echo on timing on
spool ${SCRIPTRUNFILE_SPOOL}
select name from v\$database;
@${SCRIPTRUNFILE};
spool off
exit
!

Я хочу то же самое в Windows bat-файле. Я пытался , используя ^ . Я не могу объединить все файлы SQL в один , так как мне нужно войти для каждого файла SQL в другой файл. Моя попытка написания скрипта в bat-файле заключается в следующем, и я много поиграл с этим, и он не работает с spool command not recognized. В приведенных ниже командах я также добавил префикс sqlplus, но все еще не смог достичь чего-то похожего на приведенный выше файл ksh:

sqlplus -s username/pwd@DBName >> sqlLogs.lst
set echo on timing on
spool %RUNFILENAME%.lst
@%RUNFILENAME% > %RUNFILENAME%.lst
select name from v\$database;
spool off
quit

Следующая логика выполняет мои сценарии, но не регистрирует выполняемый запрос. Кроме того, я не хочу дважды подключаться к базе данных.

echo select name from v$database; | sqlplus -s username/pwd@DBName >> sqlLogs.lst
echo quit | sqlplus -s username/pwd@DBName @%SCRIPTRUNFILE%>> %SCRIPTRUNFILE_SPOOL%.lst

Может ли кто-нибудь здесь помочь спулингу в файл, где я также могу регистрировать запросы, сохраняя при этом одно соединение с БД?

1 Ответ

1 голос
/ 04 ноября 2019

Передайте ваши непосредственные команды SQL * Plus в sqlplus через стандартный вывод, сгруппированный по символам Windows * ( и ) ...

(
    echo.set echo on timing on
    echo.spool %SCRIPTRUNFILE_SPOOL%
    echo.select name from v$database;
    echo.@%SCRIPTRUNFILE%
    echo.spool off
    echo.exit
) | sqlplus -s %USERNAME%/%PASSWORD%@%DBNAME% >> sqlLogs.lst
...