【问题标题】:Running a sql script inside a bat file which calls 3 other sql scripts在调用其他 3 个 sql 脚本的 bat 文件中运行 sql 脚本
【发布时间】:2015-10-06 01:59:39
【问题描述】:

我正在尝试在 bat 文件中运行以下命令

echo exit | sqlplus -S TEST_VKR/vkr@Oracle C:\users\vkr\scripts\Master.sql > Output.txt

Master.sql有如下内容

@@ 01_Script.sql;
@@ 02_Script.sql;
@@ 03_Script.sql;
@@ 04_Script.sql;

这些脚本在 Master.sql 中单独运行时不会返回错误。 Master.sql 中只有前 3 个脚本文件不会返回错误。当所有 4 个脚本在 Master.sql 中一起运行时,我怀疑 03 和 04 之间的重叠导致了错误。

有没有办法在 Master.sql 文件中的 sql 脚本之间添加等待步骤?

【问题讨论】:

  • 尝试将@@ 更改为一个@
  • 错误是什么,脚本在做什么,为什么您认为“重叠”是问题的原因?除非其中一个脚本使用 DBMS_JOB 或 DBMS_SCHEDULER 启动后台进程,否则脚本 3 中的任何命令都应在调用脚本 4 中的命令之前运行完成。
  • 我收到“无法打开文件”错误。注意:bat文件在不同的文件夹,脚本在不同的文件夹
  • 您的具体问题的一个答案是有一个小的 PL/SQL 块调用 DBMS_LOCK.SLEEP 等待一段时间;但我怀疑你的诊断。
  • 那么脚本 4 调用了错误消息中引用的各种脚本?它们与主脚本在同一个文件夹中还是在不同的文件夹中?你是用@还是@@给他们打电话?听起来您只是在确定这些脚本的正确路径时遇到了问题。

标签: sql oracle batch-file oracle11g oracle12c


【解决方案1】:
for %a in (0?_Script.sql) do sqlplus -S TEST_VKR/vkr@Oracle %a>>Output.txt

for /l %a in (1,1,4) do sqlplus -S TEST_VKR/vkr@Oracle 0%a_Script.sql>>Output.txt

注意:将batch file 中的% 加倍(%a%%a)并将 echo 放在 sqlplus 前面以在应用之前测试命令。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2011-05-01
    • 2020-09-16
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多