【发布时间】:2019-11-01 13:10:53
【问题描述】:
我对批处理脚本很陌生,我正在尝试运行多个 sql 文件,这些文件又可能包含来自 bat 文件的多个 sql DML/DDL 查询。输出文件必须包含所有正在执行的查询和查询输出。与 this example 不同,我的 sql 文件中没有 spool 命令,也无法编辑输入的 sql 文件。以下命令在 ksh 文件中适用于我(感谢 here-document):
$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 文件中完全相同。我试过using ^。我不能这样做combine all sql files into one,因为我需要将每个 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
这里有人可以帮助我在一个文件中记录查询,同时保持单个数据库连接吗?
【问题讨论】:
标签: oracle batch-file sqlplus