私のシェルスクリプトに問題があります。ファイルからtable1(空)にデータを挿入し、table1とtable2を比較していくつかのフィールドを更新したいとします。1つのテーブルを挿入し、別のシェルスクリプトで更新する
最初の部分は正しいものの、2番目の部分は機能しません。 最初の部分の後に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)
)
:
は、私は1時間のすべて(挿入データや更新)
私のシェルスクリプトを作りたいです
Can you私を助けてくれる?ありがとうございました! :)ここで
どのような種類のエラーがありますか?行が更新されないだけですか? table1とtable2にはいくつの行がありますか?コミットポイント/カウントに達したことはありますか?コミットポイント(10000)に達したことを確認してください。 – tale852150
行が更新されないだけです。表1 - 50.000レコード表2 - 350.000レコード –
sqlldr部分を単独で実行してから、SQL * Plusで匿名PL/SQLブロックを別々に実行してエラーが発生していないかどうかを確認しましたか? – tale852150