0

明天对我来说是一个工作日=(。科尔斯,我需要那个 sql 脚本等待我的 -bash 脚本中的 sql*loader 工作结束。下面的代码是否正确?:

#!/bin/bash

echo -------- uploader.sh v 0.1 --------
# @echo; 

export NLS_LANG=russian_cis.ru8pc866
export NLS_NUMERIC_CHARACTERS='.'

ORACLE_HOME=/opt/app/oracle/product/10.2.0/db_1/bin
export ORACLE_HOME
PATH=$ORACLE_HOME
export PATH

sqlldr userid=myscheme/0611@TEST_DB control=control_file.ctl LOG=test_log.log errors=100


wait #here i want to wait sqlloader executing

sqlplus userid=myscheme/0611@TEST_DB 10.33.19.13/test/DATA_UPLOAD/mysql_script.sql

我在这里读过等待功能。

4

1 回答 1

2

默认情况下,Shell 脚本仅在前一个命令完成后才执行命令。唯一的例外是当您在后台线程中使用&. 所以执行

sqlldr userid=myscheme/0611@TEST_DB control=control_file.ctl LOG=test_log.log errors=100
sqlplus userid=myscheme/0611@TEST_DB 10.33.19.13/test/DATA_UPLOAD/mysql_script.sql

已经会做你想做的事了。

但是,如果您想使用单独的线程以便可以在主线程中继续执行,则可以使用

sqlldr userid=myscheme/0611@TEST_DB control=control_file.ctl LOG=test_log.log errors=100 &
pid=$!
#do other stuff
wait $pid
sqlplus userid=myscheme/0611@TEST_DB 10.33.19.13/test/DATA_UPLOAD/mysql_script.sql

这将允许您do other stuffsqlldr命令完成时进行。然后程序将等待sqlldr命令完成,然后再调用sqlplus.

于 2012-04-27T14:35:55.630 回答