INSERT ALL - Множественная вставка

добавлено: 09 апр 15
понравилось:0
просмотров: 4331
комментов: 2

теги:

Автор: Myp3_u_K

Чалышев М.М www.orasource.ru
изучаем SQL группа в контакте - присоединяйтесь
Подари, продай, обменяй - множество недорогих и отличных вещей объявления вместо AVITO - ВКонтакте

Как было бы хорошо с помощью одной команды Insert добавлять много записей сразу в разные таблицы :)
И такая возможность существует. Для этого используется команда INSERT ALL


INSERT ALL  Синтаксис
INSERT ALL INTO <table_name1> VALUES <value_list)
INTO <table_name2> VALUES <value_list>)
...<SELECT Statement>;
Где table_name1, table_name1 таблицы ,  
...<SELECT Statement> - запрос  для вставки данных

Приведем пример
Создадим две таблицы tab1,tab2
create table tab1(id number , val number);

create table tab2(id number , val number);



Используя инструкцию INSERT ALL INTO добавим данные в эти таблицы

insert into tab2 values(9000,9000);
commit;
insert all 
into tab2(id,val) values(1001,1112)
into tab1(id,val) select id,val from tab2 ;
commit;


Второй вариант вставки

insert all 
into tab2(id,val) values(1001,1112)
into tab1(id,val) select id,val from tab2 ;


Дополнительный интерес представляет конструкция insert all с условным выражением приведем пример использования

INSERT ALL WHEN id1 <> 11 THEN INTO tab2
values
  (id1, val1)
  select id as id1, val as val1 from tab1;

Комментарии


  • Это правильный комментарий , спасибо что заметили неточность

  • declare
    t_obj c_obj%ROWTYPE;
    begin
    --работает такая конструкция
    EXECUTE IMMEDIATE 'select t.* from c_obj t where t.obj_id=:parmOBJ_ID'
    into t_obj using parmOBJ_ID;
    --работает такая конструкция
    insert into c_obj t values t_obj;
    --работает такая конструкция. b_obj и с_obj таблицы одной структуры
    execute immediate 'insert into b_obj
    select c.* from c_obj c where c.obj_id=:parmOBJ_ID'
    using parmOBJ_ID;
    -- к сожалению не работает такая конструкция
    EXECUTE IMMEDIATE 'insert into c_obj t values :t_obj'
    using t_obj;
    --работает такая конструкция
    update c_obj t set row=t_obj where t.obj_id=parmOBJ_ID;
    -- к сожалению не работает такая конструкция
    EXECUTE IMMEDIATE 'update c_obj t set row=:t_obj where t.obj_id=:parmOBJ_ID'
    using t_obj,parmOBJ_ID;

    Ошибка: PLS-00457: выражения должны иметь тип SQL Текст: using t_obj;

    Ошибка: PLS-00457: выражения должны иметь тип SQL Текст: using t_obj,parmOBJ_ID;

    --И пробовали как это можно обойти??



Необходимо войти на сайт, чтобы оставлять комментарии