我的shell脚本有问题。我想从文件中插入数据到table1(空),然后比较table1和table2并更新一些字段。插入一张表并用shellscript更新另一张表
第一部分是正确的,但第二部分不起作用。 它的唯一工作方式是在第一部分截断table1并再次运行脚本之后。
我想在一个时间一切(数据插入和更新)
我的shell:
#!/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)。 – tale852150
只是没有行被更新。表1 - 50.000记录。 Table2 - 350.000记录 –
您是否曾尝试单独运行sqlldr部分,然后在SQL * Plus中单独运行匿名PL/SQL块以查看是否发生错误? – tale852150