(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

pipelined-функции, первое знакомство

Источник: orahome
Петрелевич Сергей

В Oracle есть очень полезная возможность - способность функций возвращать таблицу данных, которую можно включать в другие выборки.
Такие возвращаемые таблицы являются коллекциями типа nested table, с ними могут работать и обычные функции, но чтобы получить максимальное быстродействие имеет смысл использовать pipelined-функции, пример которой я приведу ниже.

Готовим типы данных:

create type TypeTestObject as object 
(
 object_name varchar2(500),
 object_id  number,
 object_type varchar2(10)
);
/*Создаем коллекцию типа nested table*/ 
create type TypeTestList as table of TypeTestObject;

Создаем функцию:

create or replace function testFunction(pObject_type in varchar2)
          return TypeTestList pipelined as
begin
  for i in (
      select tao.OBJECT_NAME, tao.OBJECT_ID, tao.OBJECT_TYPE 
        from all_objects tao
       where tao.OBJECT_TYPE=pObject_type
     )
 loop
   pipe row (TypeTestObject(i.OBJECT_NAME, i.OBJECT_ID, i.OBJECT_TYPE));    
  end loop;
 return;
end;
Как это работает.
Открывается неявный курсор, извлекаются записи, из них создаются объекты типа  TypeTestObject  и помещаются в коллекцию.

Вот как эту функцию можно использовать в SQL-запросах:

select *
 from table(testFunction('TABLE')) t
where t.object_id=20;
Как это применить.
Часто в конкретной системе есть сложная логика, которая кочует из одного запроса/отчета в другой, такую логику сложно понимать, и, если требуется, изменять. Поэтому часто бывает целесообразно общие логические блоки вынести в отдельные библиотеки и использовать уже их, вместо "копипастного" клонирования. В этом деле хорошо помогают представления (view), но сложную логику в них не запихнуть, и тут уже работают nested table и pipelined-функции.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 16.07.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Processor License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Standard Edition 2 Named User Plus License
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Вопросы и ответы по MS SQL Server
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100