select * from
table(emp_pipe_fun(cursor(select * from emp))))));
Это позволяет «нанизывать» такие функции друг на друга
и организовывать конвейер преобразования данных.
Новый SQL-оператор Merge и новый многотабличный
синтаксис оператора Insert облегчают шаг Loading. Оператор Merge – реализация
стандартной для хранилищ данных операции UPSERT, предназначенной для решения
задач типа «если продажи в данном регионе уже были – увеличить сумму продаж
(Update) по коду региона, если не было – вставить строку с кодом и суммой
продаж (Insert)». Например (используем уже упоминавшиеся таблицы Sales и
Regions):
Внесем в нее данные о продажах за последние сутки:
merge into sales_sum SS
using (select region_id, amount
from sales where sal_date>sysdate-1) S
on (SS.region_id=S.region_id)
when matched then -- продажи по региону уже были
update set
SS.sum_amount=SS.sum_amount+S.amount
when not matched then -- первая продажа в данном регионе
insert (SS.region_id, SS.sum_amount)
values (S.region_id, S.amount);
Многотабличный Insert позволяет одним оператором
вставить строки сразу в несколько таблиц, причем можно задавать условия вставки
строки для каждой таблицы. Например, при переносе данных о продажах в архив
требуется отдельно учитывать особо крупные сделки.
Создадим таблицы для архивных данных и крупных сделок:
create
table sales_arch as select * from sales where 0=1;
create
table super_sales as select * from sales where 0=1;
Перенесем данные:
insert
all
when amount>100000
then into super_sales values (id, region_id, product_id, amount, sal_date)
when 1=1
then into sales_arch values (id, region_id, product_id, amount, sal_date)
Рекомендуем скачать другие рефераты по теме: налоги в россии, сочинение.