как разделить ранее union all на несколько вставок в цикле for

#sql #oracle #plsql #oracle11g

#sql #Oracle #plsql #oracle11g

Вопрос:

Извините, если заголовок сбивает с толку

У меня есть запрос, который выглядит примерно так:

 Declare
cursor xy is
select yr from calendar;

BEGIN
for rec1 in xy loop
insert into new_table
Select yr, month, name, position from table_1
where yr = rec1.yr
union all
Select yr, month, name, position from table_2
where yr = rec1.yr
union all
Select yr, month, name, position from table_3
where yr = rec1.yr;
commit;
end loop;
end;
  

но я хочу разделить все объединения на несколько insert into,
так что что-то вроде

 BEGIN
for rec1 in xy loop
insert into new_table
Select yr, month, name, position from table_1
where yr = rec1.yr;
commit;
insert into new_table
Select yr, month, name, position from table_2
where yr = rec1.yr
commit;
.
.
etc
  

но когда я пытаюсь это сделать, он работает так долго и переходит в тайм-аут. В то время как предыдущее заняло бы всего пару минут. Так что, вероятно, что-то не так с запросом, поэтому любая помощь приветствуется

Комментарии:

1. Прежде всего, удалите COMMIT s из цикла. Во-вторых, у вас есть решение, которое работает хорошо и выполняет работу правильно. Итак, почему вы настаиваете на том, чтобы переписать его во что-то, что работает хуже, чем это, и вас это не устраивает?

2. Кстати, отступы в коде делают его намного более читаемым и помогают избежать синтаксических ошибок.