循环中的sqlplus - unix

时间:2017-12-20 07:40:07

标签: oracle shell unix plsql sqlplus

有没有办法在循环中发送多个sqlplus命令但等待一个成功运行才能启动下一个? 这是我的代码示例。我试图添加睡眠15,因为我要执行的功能需要10-20秒才能运行。我想摆脱15s常数并让它们一个接一个地运行。

if [ "$#" -eq 1 ]; then
   checkUser "$1"
   while read line; do
     sqlplus $user/$pass@$server $line
     sleep 15
   done < "$wrapperList"
fi

1 个答案:

答案 0 :(得分:1)

while循环中的指令按顺序完成。使用;链接指令等同于这样做:

sqlplus $user/$pass@$server $line1 
sqlplus $user/$pass@$server $line2

所以这里不需要sleep 15,因为sqlplus命令不会并行调用。你这样做的方式是一个接一个地调用它们。

Nota:如果第一行没有正确返回,最好停止运行,使用&&说:仅在前一个返回码为0时运行

sqlplus $user/$pass@$server $line1 &&\ 
sqlplus $user/$pass@$server $line2

要在while循环中使用它:

   checkUser "$1"
   while read line; do
     sqlplus $user/$pass@$server $line
     RET_CODE=$? # check return code, and break if not ok.
     if [ ${RET_CODE} != 0 ]; then
       echo "aborted." ; break
     fi
   done < "$wrapperList"

另一方面,当您想要并行运行时,语法会有所不同,例如:Unix shell script run SQL scripts in parallel