2011-01-31 20 views
1

複数のレコードをテーブルに挿入しようとしていますが、すべてのレコードに同じシーケンス値を使用しています。複数の行に1つのシーケンス値を挿入する

これは、How can I insert multiple rows into oracle with a sequence value?と似ていますが、指定された答えは複数の異なるシーケンス番号を挿入します。複数のrecsに対して同じシーケンス番号が必要です。

create table test1 ( 
    col_a number, 
    col_b number 
); 
commit; 

create sequence test_seq increment by 1 start with 2 minvalue 1 nocycle nocache noorder; 
commit; 

insert into test1 (col_a, col_b) 
select a.object_id, test_seq.nextval from (
    select object_id from all_objects where rownum < 5 
) a; 
commit; 

上記の問題は、検索および挿入複数の(異なる)「test_seq.nextval」の値を、私はすべての行のために挿入同じ値にしたいということです。

これは、トリガー(または複数のSQL文)を使用せずにストレートSQLでも可能ですか?関連する質問への回答の1つは、そうでないかもしれないと示唆していましたが、それは私には分かりませんでした。

ありがとうございました。
私はOracle 11gを使用しています。

答えて

5

の代わりにcurrvalを使用してください。

select test_seq.nextval from dual; 

insert into test1 (col_a, col_b) 
select a.object_id, test_seq.currval from (
    select object_id from all_objects where rownum < 5 
) a; 

私は二つの文、シーケンスをインクリメント(ひいては、それが選択trhough CURRVAL作る)する第一およびCURRVALを使用する2番目なしていることを行うには方法を知っています。

+0

ありがとうございました。私は単一のSQL文を期待していましたが、これはあまりにも悪くありません。私は "currval"について知っていたが、何らかの理由でこの文脈でそれについて考えることはなかった。誰もが単一のstmtでこれを行う方法を見つけることができない場合、私はこの答えを受け入れるでしょう。 – Gerrat

+0

そして、私は確かに、単一の文章の解決策があればそれについて学ぶことに興味があるでしょう。 –

+2

なぜ単一のステートメントですか?それを単一のpl/sqlブロックに入れることは、単一の文、すなわち単一の実行可能なコマンドとしてカウントされますか? – araqnid

関連する問題