Реферат: Oracle9i. Обзор некоторых новых возможностей
create or replace type emp_t_table as table of emp_t;
Сама конвейерная функция:
create or replace FUNCTION emp_pipe_fun(cur emp_pipe.strong_refcur_t) RETURN emp_t_table PARALLEL_ENABLE (PARTITION cur BY ANY) PIPELINED is one_row cur%rowtype; BEGIN LOOP FETCH cur INTO one_row; /* Здесь можно вставить любую обработку полученной строки */ EXIT WHEN cur%NOTFOUND; /* Оператор PIPE ROW возвращает одну строку результата */ PIPE ROW (emp_t(one_row.empno, one_row.ename, one_row.sal*10)); END LOOP; CLOSE cur; /* RETURN вызывается без аргументов, */ /* т.к. все результаты функция уже вернула через PIPE ROW */ RETURN; END; |
Использование этой функции:
select * from table(emp_pipe_fun(cursor(select * from emp))); |
Результат работы emp_pipe_fun может послужить источником данных для другой конвейерной функции (назовем ее another_fun):
Select * from table(another_fun(cursor( select * from table(emp_pipe_fun(cursor(select * from emp)))))); |
Это позволяет «нанизывать» такие функции друг на друга и организовывать конвейер преобразования данных.
Новый SQL-оператор Merge и новый многотабличный синтаксис оператора Insert облегчают шаг Loading. Оператор Merge – реализация стандартной для хранилищ данных операции UPSERT, предназначенной для решения задач типа «если продажи в данном регионе уже были – увеличить сумму продаж (Update) по коду региона, если не было – вставить строку с кодом и суммой продаж (Insert)». Например (используем уже упоминавшиеся таблицы Sales и Regions):
Создадим суммарную таблицу продаж по регионам:
create table Sales_sum (region_id number, sum_amount number); |
Внесем в нее данные о продажах за последние сутки:
К-во Просмотров: 226
Бесплатно скачать Реферат: Oracle9i. Обзор некоторых новых возможностей
|