1

我有一个带有这段代码的 shell 脚本:

sqlldr $ws_usr_eva/$ws_pass_eva@$ws_esq_eva CONTROL=/$HOME/controlfiles/CONTROL_FILE.CTL LOG=/$HOME/batch/log/LOG_FILE.$fecfile.log DATA=/$HOME/batch/input/INPUT_FILE_$fecfile.txt > /$HOME/batch/log/result_loader_eva.ora

变量 $ws_usr_eva、$ws_pass_eva 和 $ws_esq_eva 在我执行 sqlldr 之前被填充。我已经检查了内容并且没问题。

因此,当我运行脚本时,它会显示:LRM-00112: multiple values not allowed for parameter 'control'

我试图在没有变量的情况下运行脚本,它工作正常:

sqlldr user/pwd@schema CONTROL=/$HOME/controlfiles/CONTROL_FILE.CTL LOG=/$HOME/batch/log/LOG_FILE.$fecfile.log DATA=/$HOME/batch/input/INPUT_FILE_$fecfile.txt > /$HOME/batch/log/result_loader_eva.ora

我必须在 sqlldr 中使用变量,因为它从配置文件中读取它们。

我也尝试使用 sqlldr userid=$ws_usr_eva/$ws_pass_eva@$ws_esq_eva ...但它没有用。

你能帮助我吗?

提前致谢。

4

2 回答 2

3

如果它对任何人都有帮助,您需要将路径(数据、控制、日志)包含在单个 qoutes 中。双引号不起作用(尽管 sqlldr 不会抱怨,而是简单地忽略双引号)。

于 2013-05-16T18:10:00.327 回答
0

在您的外壳中,尝试转义您的变量::

sqlldr "${ws_usr_eva}/${ws_pass_eva}@${ws_esq_eva}" "CONTROL=${HOME}/controlfiles/CONTROL_FILE.CTL" "LOG=${HOME}/batch/log/LOG_FILE.${fecfile}.log" "DATA=${HOME}/batch/input/INPUT_FILE_${fecfile}.txt" > "${HOME}/batch/log/result_loader_eva.ora"
于 2011-10-13T08:11:25.303 回答