You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Sqlplus并行脚本执行完毕后再执行后续SQL脚本?

解决批处理并行执行Sqlplus脚本后等待全部完成再执行后续命令的方法

方法一:通过生成标记文件等待

方式1:修改SQL脚本添加标记生成

在每个并行执行的SQL脚本(myscript1.sql、myscript2.sql、myscript3.sql)末尾添加如下命令,让脚本执行完成后生成对应标记文件:

-- 在myscript1.sql结尾添加
HOST echo. > script1_done.txt
-- 在myscript2.sql结尾添加
HOST echo. > script2_done.txt
-- 在myscript3.sql结尾添加
HOST echo. > script3_done.txt

修改主批处理文件,实现并行启动、等待标记文件生成后执行后续脚本:

@echo off
:: 清理历史标记文件
del /q script1_done.txt script2_done.txt script3_done.txt

:: 并行启动三个Sqlplus脚本
start sqlplus user/pwd@tnsid @myscript1.sql &
start sqlplus user/pwd@tnsid @myscript2.sql &
start sqlplus user/pwd@tnsid @myscript3.sql

:: 循环等待所有标记文件生成
:wait_loop
if not exist script1_done.txt goto wait_loop
if not exist script2_done.txt goto wait_loop
if not exist script3_done.txt goto wait_loop

:: 所有并行脚本执行完毕,执行第四个脚本
sqlplus user/pwd@tnsid @myscript4.sql

:: 清理标记文件
del /q script1_done.txt script2_done.txt script3_done.txt

方式2:用小批处理包装Sqlplus调用

如果不想修改原SQL脚本,可创建三个小批处理文件分别包装每个Sqlplus调用:

run_script1.bat:

sqlplus user/pwd@tnsid @myscript1.sql
echo. > script1_done.txt

run_script2.bat:

sqlplus user/pwd@tnsid @myscript2.sql
echo. > script2_done.txt

run_script3.bat:

sqlplus user/pwd@tnsid @myscript3.sql
echo. > script3_done.txt

主批处理文件内容同方式1,仅需将并行启动命令改为:

start cmd /c run_script1.bat &
start cmd /c run_script2.bat &
start cmd /c run_script3.bat

方法二:使用Windowswaitfor信号机制

利用Windows内置的waitfor命令实现进程间信号通知,无需创建文件或修改原SQL脚本:

@echo off

:: 并行启动三个Sqlplus脚本,每个执行完成后发送对应信号
start cmd /c "sqlplus user/pwd@tnsid @myscript1.sql && waitfor /si script1_finish" &
start cmd /c "sqlplus user/pwd@tnsid @myscript2.sql && waitfor /si script2_finish" &
start cmd /c "sqlplus user/pwd@tnsid @myscript3.sql && waitfor /si script3_finish"

:: 等待所有并行脚本的完成信号
waitfor script1_finish
waitfor script2_finish
waitfor script3_finish

:: 执行第四个Sqlplus脚本
sqlplus user/pwd@tnsid @myscript4.sql

:: 清理已注册的信号(避免影响后续执行)
waitfor /d script1_finish
waitfor /d script2_finish
waitfor /d script3_finish

说明:

  • /si参数表示发送信号到同一台机器的所有会话
  • /d参数表示删除已注册的信号

内容的提问来源于stack exchange,提问作者Javi Torre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:45:51