【发布时间】:2016-05-21 10:02:39
【问题描述】:
我的 shell 脚本有问题。我想将数据从文件插入到 table1(空),然后将 table1 与 table2 进行比较并更新一些字段。
第一部分是正确的,但第二部分不起作用。 它起作用的唯一方法是,如果在第一部分之后我截断 table1 并再次运行脚本。
我想一次完成所有事情(插入数据并更新)
我的脚本:
#!/bin/ksh
DATE=`date +"%Y%m%d"`
PATH_LD=$HOME/myscripts/script_anuk
PATH_BIN=$HOME/bin/myscripts/script_anuk
PATH_LOG=$HOME/log/myscripts/script_anuk
logfile=$PATH_LOG/script_anuk$FECHA.log
logfileMod=$PATH_LOG/script_anuk_mod$FECHA.log
# Insert
sqlldr parfile=$PATH_LD/script_anuk_param.par USERID=$CONSQLPLUS
# Update
sqlplus -s $CONSQLPLUS << EOF!
SET SERVEROUTPUT ON
SET FEEDBACK OFF
exec declare cursor d1 is select d.book, d.phone,d.pencil from table1 d,table2 n where d.book = n.book; whow number:=0;begin for r1 in d1 loop update table2 set phone=r1.phone,pencil=r1.pencil where book = r1.book; whow := whow + 1;if mod(whow,10000) = 0 then commit; end if;end loop;end;
exit
EOF!
我的.par
Par
USERID=/
CONTROL=$HOME/myscripts/script_anuk/script_anuk_param.ctl
DATA=$HOME/myscripts/script_anuk/data1.dat
LOG=$HOME/log/myscripts/script_anuk/script_anuk_param.log
BAD=$HOME/myscripts/script_anuk/error/script_anuk_param.bad
DISCARD=$HOME/myscripts/script_anuk/error/script_anuk_param.dsc
ERRORS=1000000
ROWS=500
DIRECT=FALSE
我的 .ctl
Ctl
LOAD DATA
INFILE *
INTO TABLE table1
APPEND
FIELDS TERMINATED BY ';'
(book ,
phone ,
pencil)
)
你能帮帮我吗?谢谢! :)
【问题讨论】:
-
您会遇到什么样的错误(如果有)?只是没有更新行吗? table1 和 table2 有多少行?你有没有达到你的提交点/计数?尝试验证您是否达到了提交点 (10000)。
-
只是没有更新任何行。表 1 - 50.000 条记录。表 2 - 350.000 条记录
-
您是否尝试过自己运行 sqlldr 部分,然后在 SQL*Plus 中单独运行匿名 PL/SQL 块以查看是否出现任何错误?
标签: oracle shell unix plsql sh