运行 来自多个文件的 sqlplus 命令,在 Windows 批处理文件中带有查询日志记录或假脱机

Run sqlplus commands from multiple files with query logging or spool in Windows Batch File

我对批处理脚本很陌生,我正在尝试 运行 多个 sql 文件,而这些文件又可能包含来自 bat 的多个 sql DML/DDL 查询文件。输出文件必须包含所有正在执行的查询和查询输出。与 this example 不同,我的 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 文件中完全相同。我已经尝试 using ^. I can't do 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

这里有人可以帮我假脱机到一个文件,我也可以在其中记录查询,同时维护单个数据库连接吗?

通过标准输出将您的直接 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