使用Windows批处理文件中的查询日志记录或后台处理从多个文件运行sqlplus命令

问题描述 投票:0回答:1

我对批处理脚本非常陌生,我正在尝试运行多个sql文件,而这些文件又可能包含来自bat文件的多个sql DML / DDL查询。输出文件必须包含所有正在执行的查询和查询输出。与this example不同,我的sql文件中没有假脱机命令,并且无法编辑输入的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
1个回答
1
投票
( 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
© www.soinside.com 2019 - 2024. All rights reserved.