Пожалуйста, вставьте несколько строк, используя одну команду немедленного выполнения - PullRequest
2 голосов
/ 01 марта 2011

Есть ли способ вставить несколько строк в одну EXECUTE IMMEDIATE?Вместо записи EXECUTE IMMEDIATE для каждой вставки ...

Ответы [ 5 ]

7 голосов
/ 01 марта 2011

Трудно сказать, что вы вставляете. Вы можете использовать EXECUTE IMMEDIATE, чтобы сделать INSERT ... SELECT достаточно легко, но я подозреваю, что это не то, что вам нужно, и, вероятно, вы не просто хотите цикл вокруг EXECUTE IMMEDIATE.

Если вставка из нескольких таблиц - это не то, что вам нужно, вы можете использовать EXECUTE IMMEDIATE в блоке PL / SQL и / или в FORALL

create table test_forall_dyn (val varchar2(1));

declare
  type tab_char is table of varchar2(1) index by binary_integer;
  t_char tab_char;
begin
  for i in 1..26 loop
    t_char(i) := chr(64 + i);
  end loop;
  forall i in 1..26
    execute immediate 
      'begin 
         insert into test_forall_dyn (val) values(:1);  
         insert into test_forall_dyn (val) values(:1); 
       end;' 
       using t_char(i);
end;
/

select count(*) from test_forall_dyn;
1 голос
/ 01 марта 2011
EXECUTE IMMEDIATE
INSERT INTO table (col1, col2, col3) (
            SELECT 1 AS col1, 2 AS col2, 3 AS col3 FROM dual
  UNION ALL SELECT 4,         5,         6         FROM dual
  UNION ALL SELECT 7,         8,         9         FROM dual ) ;
0 голосов
/ 08 декабря 2011

Конечно, вы можете перейти на пакетную вставку ...

0 голосов
/ 08 марта 2011

@ maria Первый запрос выбора фрейма, который дает вам несколько строк, которые вы собираетесь вставить ... Вы выбираете этап, который нужно указать в порядке данных, которые вы хотите вставить в таблицу

Затем используйте ..

Вставить в Tabl1 (col1, col2, col3) (выбрать имя, адрес, телефон из tabl2) совершить;

0 голосов
/ 01 марта 2011

Мария, зачем вообще использовать динамический sql?В большинстве случаев масштабируемость не совсем улучшается с помощью динамического SQL.То же самое для читабельности.Отладка сложнее .... Во многих случаях есть и странные проблемы с безопасностью .... Я не знаю, почему вы используете динамический sql, но если это часть производственного приложения, я бы пересмотрел его использование.

Рональд.

...