Мне обычно нравится реализовывать конвейерную функцию со всеми объектами внутри пакета.
Это запрос результата:
select *
from table(pkg_example_pipeline.F_PIPELINE_EXEMPLE(0));
Пакет:
create or replace PACKAGE pkg_example_pipeline IS
-- *********** TYPES
TYPE TYPE_EXEMPLE is record (
id NUMBER(10,0),
name VARCHAR2(100),
date_test DATE
);
TYPE v_table_exemple is table of TYPE_EXEMPLE;
-- ***********
-- *********** PIPELINE FUNCTIONS
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple pipelined;
END; --PACKAGE SPEC
/
create or replace PACKAGE BODY pkg_example_pipeline
IS
-- *********** CURSORs
/**
* Just if you need
**/
CURSOR cr_exemple
IS
SELECT 0 id, 'name' name, sysdate date_test
from dual;
-- ***********
-- *********** PIPELINE FUNCTIONS
--POSICAO DIARIA
FUNCTION F_PIPELINE_EXEMPLE (pId NUMBER)
RETURN v_table_exemple pipelined
IS
row_exemple TYPE_EXEMPLE;
BEGIN
FOR reg_exemple IN (SELECT 0 id, 'name' name, sysdate date_test from dual) LOOP
BEGIN
row_exemple.id := reg_exemple.id;
row_exemple.name := reg_exemple.name;
row_exemple.date_test := reg_exemple.date_test;
pipe row (row_exemple);
EXCEPTION
WHEN others THEN
dbms_output.put_line('error: ' || sqlerrm);
row_exemple.name := 'error: ' || sqlerrm;
pipe row (row_exemple);
END;
END LOOP;
EXCEPTION
WHEN others THEN
ROLLBACK;
END;
-- ***********
END; --PKG BOBY