Мне нужно написать процедуру, которая будет вставлять тысячи строк в таблицу и использовать автоматически сгенерированный идентификатор, полученный из этих строк, и использовать его в других вставках.
Я использовал цикл for, в котором я сохраняюидентификатор последовательности в переменной, затем используйте его в моих вставках.
declare
first_id integer;
BEGIN
FOR texts in (select distinct text from table_texts )
LOOP
first_id := SEQ_IDS_OBJECTID.NEXTVAL;
INSERT INTO table_1(id,some_fields)
VALUES (first_id, 'blablabla');
insert into table_2 (id,text_field)
VALUES (first_id, texts.text);
END LOOP;
commit;
END;
Я думаю, что это не идеальный способ достичь того, что мне нужно.Также, когда я ввожу код в TOAD, я получаю следующее предупреждение: Правило 4809 (цикл, содержащий операторы DML, должен быть реорганизован для использования BULK COLLECT и FORALL)
Есть ли лучший способ сделать это?
РЕДАКТИРОВАТЬ:
вышеуказанный код был упрощен.Но я думаю, что я должен раскрыть больше этого, чтобы объяснить случай:
declare
first_id integer;
second_id integer;
BEGIN
FOR texts in (select distinct text1 , text2 from mdf )
LOOP
first_id := XAKTA.SEQ_IDS_OBJECTID.NEXTVAL;
select id_1 into second_id from table_3 where field_1 =texts.text1 ;
INSERT INTO table_1(id_1,id_2,some_fields)
VALUES (first_id ,second_id ,'blablabla');
insert into table_2 (id,text1,text2)
VALUES (first_id, texts.text1,texts.text2);
END LOOP;
commit;
END;