我有一个包含以下代码的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 ...但它没有用。
你能帮助我吗?
提前致谢。
答案 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"