The following example demonstrates passing parameters into a PTF.
(Note: The example is similar to the first example in Controlling Pass Through Columns. The only difference is that in Controlling Pass Through Columns the number of columns to keep was hardcoded to "2". In this lesson the value is passed as an argument via the P_COLUMN_COUNT parameter.)
create or replace package ptf_demo as
function describe(
p_input_table_metadata in out dbms_tf.table_t,
P_COLUMN_COUNT IN PLS_INTEGER )
return
dbms_tf.describe_t ;
function show_columns( p_table table, P_COLUMN_COUNT IN PLS_INTEGER )
return table pipelined row polymorphic using ptf_demo ;
end;
/
create or replace package body ptf_demo as
function describe(
p_input_table_metadata in out dbms_tf.table_t,
P_COLUMN_COUNT IN PLS_INTEGER )
return
dbms_tf.describe_t
as
i pls_integer := p_input_table_metadata.column.first ;
begin
while i is not null loop
if i > P_COLUMN_COUNT then
p_input_table_metadata.column(i).pass_through := false ;
end if;
i := p_input_table_metadata.column.next(i) ;
end loop ;
return null ;
end describe ;
end ptf_demo ;
/
select *
from ptf_demo.show_columns( p_table => scott.emp, P_COLUMN_COUNT => 2 ) ;
EMPNO ENAME
---------- ----------
7839 KING
7934 MILLER
7782 CLARK
7369 SMITH
7566 JONES
7876 ADAMS
7902 FORD
7788 SCOTT
7499 ALLEN
7521 WARD
7654 MARTIN
7698 BLAKE
7844 TURNER
7900 JAMES
select * from ptf_demo.show_columns( p_table => scott.emp, P_COLUMN_COUNT => 5 ) ;
EMPNO ENAME JOB MGR HIREDATE
---------- ---------- ---------- ---------- ----------
7839 KING PRESIDENT 1981-11-17
7934 MILLER CLERK 7782 1982-01-23
7782 CLARK MANAGER 7839 1981-06-09
7369 SMITH CLERK 7902 1980-12-17
7566 JONES MANAGER 7839 1981-04-02
7876 ADAMS CLERK 7788 1987-07-13
7902 FORD ANALYST 7566 1981-12-03
7788 SCOTT ANALYST 7566 1987-07-13
7499 ALLEN SALESMAN 7698 1981-02-22
7521 WARD SALESMAN 7698 1981-02-22
7654 MARTIN SALESMAN 7698 1981-09-28
7698 BLAKE MANAGER 7839 1981-05-01
7844 TURNER SALESMAN 7698 1981-09-08
7900 JAMES CLERK 7698 1981-12-03
