2

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

これは次のようなものです:シーケンス値を使用して oracle に複数の行を挿入するにはどうすればよいですか? ただし、与えられた答えは複数の異なるシーケンス番号を挿入し、複数のレコードに同じシーケンス番号が必要です。

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を使用しています。

4

1 に答える 1

6

currvalの代わりに使用しnextvalます。

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;

最初のステートメントはシーケンスをインクリメントする (したがって、それを currval で選択可能にする) ステートメントで、2 番目のステートメントは currval を使用するステートメントです。

于 2011-01-31T20:31:47.813 に答える