【问题标题】:Run sqlplus commands from multiple files with query logging or spool in Windows Batch File在 Windows 批处理文件中使用查询日志记录或假脱机从多个文件运行 sqlplus 命令
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。以上能够记录我正在运行的查询的输出。它没有记录查询。我试过echo.set serveroutput on,但没有运气。你能帮忙吗?
    • 没关系。我可以通过使用 /nolog 启动 sqlplus 然后在内部作为批量命令连接来做到这一点。 (echo.connect username/pwd@dbname .... )|sqlplus /nolog
    • @shrutisingh,set echo on 应该可以满足您的要求。我不知道为什么你的情况没有。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2023-04-04
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多