Реферат: 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. Обзор некоторых новых возможностей