Показать результат в табличном виде через функцию в Oracle


Как то раз необходимо было создать такой запрос, чтобы при его вызове с определнными параметрами был выведен результат в табличном виде. Данные в таблице всегда меняются из за многочиленных факторов. И все это дело необходимо было передать клиенту. 

Вот примерный вызов функции 

SELECT * FROM table(grafik.get_ups('123321321548'));

Вывод будет примерно таким

 ID NAME SUM DATE_ADD
 1 TEST 50000 01.01.2016

 

Ну чтож приступим к реализации.

Создаем Package с именем grafik

SPEC

create or replace package grafik is

TYPE measure_record IS RECORD(
id integer, 
name varchar2(100),
sum number,
date_add date
);

TYPE measure_table IS TABLE OF measure_record;

FUNCTION get_ups(t number) RETURN measure_table PIPELINED;
end grafik;

BODY

create or replace package body grafik is

FUNCTION get_ups(cnc number) RETURN measure_table PIPELINED IS
BEGIN
  for i in(
    select id, name, sum, date_add from dual
  loop

    --Здесь нужно вписать определенные функции или действия
    PIPE ROW (i); --Вносим данные
  end loop;
end if;


RETURN;
END get_ups;

end grafik;

 

Конечно все что описано выше на 5+ не тянет. Это урезанная функция. На самом деле в теле пакета код на 3000 строчек у меня растянут и писать его сюда нету смысла. Это примерный показ реализации.