Oracleで複数テーブルに同じシーケンスをinsertする方法


Oracleにて、3つのテーブルに大量insertする処理で相談です。

データは3テーブルにそれぞれMAXで３０００件がinsertされる想定なので、最大でも合計９０００レコードが増えることになります。

A_table, B_table, C_tableそれぞれに `table_id` というカラムを持たせており、insertの時に同じ値を入れたいです。この
`table_id` には `hoge_seq.nextval` で作成した数字を入れたいです。

実現方法としては、もしinsertするデータが３０００件の場合  
毎回 `select hoge_seq.nextval from dual` を実行→連番を取得

[code]

    insert into A_table (table_id) values(1)
    insert into B_table (table_id) values(1)
    insert into C_table (table_id) values(1)
    
[/code]

これを３０００回繰り返さないといけないでしょうか？

それとも `select hoge_seq.nextval from dual` 連番の取得をした後にinsertしたい件数分、数字をインクリメントさせて

[code]

    insert into A_table (table_id) values(1)....(3000)
    insert into B_table (table_id) values(1)....(3000)
    insert into C_table (table_id) values(1)....(3000)
    
[/code]

こっちの方がいいでしょうか？

DBへの負荷を考えたら後者の方がいい気がします  
しかし、後者を採用した場合万が一途中で別の機能からテーブルにinsertが走った時に同じIdのデータが存在する可能性が出てきており悩んでいます

ご回答よろしくお願いいたします




シーケンスはトランザクションとは無関係に更新されるので、整合性を保つには前者以外の方法は考えられません。  
後者でやるのであれば、採番のためのテーブルを用意し、範囲が被らないよう排他制御する必要があるでしょう。




シーケンスはトランザクションとは無関係に更新されるので、整合性を保つには前者以外の方法は考えられません。  
後者でやるのであれば、採番のためのテーブルを用意し、範囲が被らないよう排他制御する必要があるでしょう。

