sqlloaderで既存のシーケンスのNEXTVALを使用する
sqlloaderで既存のシーケンスのNEXTVALを使用には
コントロールファイルの対象カラムにexpression
句と対象のシーケンスを指定してあげる。
以下例ではtest_seqid
カラムにSEQ_SEQTEST.NEXTVAL
の値を格納する。
- コントロールファイルを作成
$ vim test.ctl LOAD DATA INFILE 'seqtest.csv' BADFILE 'seqtest.csv.bad' DISCARDFILE 'seqtest.csv.dsc' INTO TABLE seqtest APPEND FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ( test_seqid expression "SEQ_SEQTEST.NEXTVAL" ,txt ,dd "sysdate" )
- csvの内容
$ vim seqtest.csv "test1",sysdate "test2",sysdate "test3",sysdate "test4",sysdate "test5",sysdate "test6",sysdate "test7",sysdate "test8",sysdate "test9",sysdate "test10",sysdate ・ ・ ・
- 実行前
>select SEQUENCE_NAME,INCREMENT_BY,CACHE_SIZE,LAST_NUMBER from user_sequences where sequence_name ='SEQ_SEQTEST'; SEQUENCE_NAME INCREMENT_BY CACHE_SIZE LAST_NUMBER ------------------------------ ------------ ---------- ----------- SEQ_SEQTEST 1 20 21 >select max(TEST_SEQID),count(*) from seqtest; MAX(TEST_SEQID) COUNT(*) --------------- ---------- 14 14
- 実行後
$ sqlldr orauser/oracle control=test.ctl コミット・ポイントに達しました。 - 論理レコード件数47 >select SEQUENCE_NAME,INCREMENT_BY,CACHE_SIZE,LAST_NUMBER from user_sequences where sequence_name ='SEQ_SEQTEST'; SEQUENCE_NAME INCREMENT_BY CACHE_SIZE LAST_NUMBER ------------------------------ ------------ ---------- ----------- SEQ_SEQTEST 1 20 61 select max(TEST_SEQID),count(*) from seqtest; MAX(TEST_SEQID) COUNT(*) --------------- ---------- 60 60
SEQ_SEQTEST
のLAST_NUMBER
が増えていることがわかる。