Вставка одного значения последовательности в несколько строк - PullRequest
2 голосов
/ 31 января 2011

Я пытаюсь вставить несколько записей в таблицу, но использую одно и то же значение последовательности для каждой записи.

Это похоже на: Как я могу вставить несколько строк в оракул со значением последовательности? однако при данном ответе вставляется несколько разных порядковых номеров, и я хочу один и тот же порядковый номер для нескольких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-операторам)?Один из ответов на связанный вопрос намекал на то, что это может быть не так, но мне это было непонятно.

Спасибо.
Я использую Oracle 11g, если это поможет.

1 Ответ

5 голосов
/ 31 января 2011

используйте 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), а второй для использования currval.

...