【问题标题】:Run SQL PLUS one by one in batch file在批处理文件中一一运行 SQL PLUS
【发布时间】:2014-01-15 04:47:59
【问题描述】:

我的目录中有一些sql 文件,我想使用我的批处理文件编码使用sql plus 运行sql 文件。

我的代码如下所示。

start sqlplus %DBUName%/%DBPwd%@%GIName% "@%~dp0SQL\SetUp\SETUP.sql" 
start sqlplus %DBUName%/%DBPwd%@%CIName% "@%~dp0SQL\DBLINK\CIDBLINK.sql" '''%MDBName%'''
start sqlplus %DBUName%/%DBPwd%@%CSName% "@%~dp0SQL\DBLINK\CUDBLINK.sql" '''%MDBName%'''
start sqlplus %DBUName%/%DBPwd%@%PIName% "@%~dp0SQL\DBLINK\PIDBLINK.sql" '''%MDBName%'''
start sqlplus %DBUName%/%DBPwd%@%PUName% "@%~dp0SQL\DBLINK\PUDBLINK.sql" '''%GIName%'''

我想一个接一个地运行上述命令,而不是并行运行,因为每个sql 都依赖于另一个。

期待您的帮助。

【问题讨论】:

  • 你试过用/wait参数start吗?我会尝试或根本不使用 start。
  • 不要使用start - 直接调用sqlplus

标签: batch-file oracle11g sqlplus


【解决方案1】:

只需简单地使用“start /wait”,或者使用“call”并将每个脚本执行放在它自己的批处理文件中,该批处理文件会计算退出代码并返回 0、1 或错误代码。

这个脚本证明它有效:

@echo off
call :timepause 3
call :timepause 3
call :timepause 3
echo %errorlevel%
call :rerror 2
echo %errorlevel%
goto :end
:timepause num
echo timeout for %1 seconds...
ping -n %1 -w 1000 127.1 >NUL
exit /b 0
:rerror num
echo error after %1 seconds...
ping -n %1 -w 1000 127.1 >NUL
exit /b 1
:end
pause

【讨论】:

  • 谢谢。我不想创建更多的 bat 文件并调用它。我将尝试在上面的每一行中使用 start/wait。但我的问题是它会以与“呼叫”相同的方式工作
  • 通过使用单独的批处理文件,您可以更精细地控制退出代码返回的内容。使用“开始”,您只需接受程序返回的默认退出代码(0 或 1)。当您在 Jenkins 上运行脚本时,这很重要,但在其他情况下就没有那么重要了。
  • 我试过但没有运气.. 仍然并行运行。我创建了一个单独的批处理文件来在我的主 sql 运行 'start sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" CALL "%~dp0Config\DBLINK 后调用和运行 sql 查询.bat" %DBUName% %DBPwd% %GISName%'
  • 好的,我编辑了我的问题,证明它会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多