Вставка идентификатора в оператор цикла Oracle9

Я пытаюсь вставить кучу данных в таблицу, используя цикл for. Для первичного ключа я пытаюсь использовать последовательность, но получаю:

ORA-00001: ошибка нарушения уникального ограничения (constraint_name).

Мой код выглядит так:

FOR a IN (select * from table a)
LOOP 

    select seq.nextval into id1 from dual;

    insert into table b (primarykey, value1...)

    select (id1, value1...) from table c

end loop

Любые идеи, почему я все еще получаю уникальную ошибку ограничения?


person John Doe    schedule 25.05.2018    source источник
comment
Можете ли вы опубликовать точный код?   -  person Sudipta Mondal    schedule 25.05.2018


Ответы (1)


Я предполагаю, что таблица c содержит более одной строки:

FOR a IN (select * from table_a) LOOP
  select seq.nextval into id1 from dual;

  insert into table_b (primarykey, value1...)
  select id1, value1... from table_c;    
  -- the same id1 will be used for many rows 
  -- and cause `UNIQUE` constraint violation

end loop;

Я бы переписал это как:

INSERT INTO table_b(primarykey, value1...)
SELECT seq.nextval, value1, ...
FROM table_c
WHERE ....;
person Lukasz Szozda    schedule 25.05.2018