sqlldr LRM-00112:参数'control'不允许多个值

时间:2011-09-12 16:33:37

标签: oracle sql-loader

我有一个包含以下代码的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

在执行sqlldr之前填充变量$ ws_usr_eva,$ ws_pass_eva和$ ws_esq_eva。我已经检查了内容和它的确定。

因此,当我运行脚本时,它会显示:LRM-00112:参数'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 ...但它没有用。

你能帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果它帮助任何人,你需要将你的路径(数据,控制,日志)包含在单个qoutes中。双qoutes不起作用(虽然sqlldr不会抱怨,而只是忽略双qoutes)。

答案 1 :(得分:0)

在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"