CREATE OR REPLACE PACKAGE BODY kscope_ptf AS
FUNCTION describe (p_tbl IN OUT DBMS_TF.TABLE_T )
RETURN DBMS_TF.DESCRIBE_T IS
-- variables for new columns
v_new_col1 DBMS_TF.COLUMN_METADATA_T;
v_new_col2 DBMS_TF.COLUMN_METADATA_T;
-- variables for new column set
v_new_cols DBMS_TF.COLUMNS_NEW_T;
BEGIN
-- varchar2(10) named new_col1
v_new_col1 := DBMS_TF.COLUMN_METADATA_T( type => DBMS_TF.TYPE_VARCHAR2,
name => 'NEW_COL1',
max_len => 10 );
-- number(10) named new_col2
v_new_col2 := DBMS_TF.COLUMN_METADATA_T( type => DBMS_TF.TYPE_NUMBER,
name => 'NEW_COL2',
max_len => 10 );
-- add to column list
v_new_cols := DBMS_TF.COLUMNS_NEW_T( 1 => v_new_col1,
2 => v_new_col2 );
-- return a cursor and kindly advise of the new columns
RETURN DBMS_TF.DESCRIBE_T ( new_columns => v_new_cols,
row_replication => TRUE );
END;
/*--------------------------------------------------------*/
PROCEDURE fetch_rows IS
/*--------------------------------------------------------*/
v_env DBMS_TF.ENV_T;
v_vc2_t DBMS_TF.COLUMN_DATA_T; -- table of columns
v_n_t DBMS_TF.COLUMN_DATA_T; -- table of columns
v_rowset DBMS_TF.ROW_SET_T;
v_repfac DBMS_TF.TAB_NATURALN_T;
BEGIN
-- environment for this fetch including row count
v_env := DBMS_TF.GET_ENV;
-- for every row in this rowset...
FOR counter IN 1..v_env.row_count LOOP
-- add a numeric value for NEW_COL1 in the row
v_n_t.tab_number(counter) := 10 * counter;
-- add a vc2 value value for NEW_COL2 in the row
v_vc2_t.tab_varchar2(counter) := CHR(65 + counter);
END LOOP;
v_rowset(1) := v_vc2_t;
v_rowset(2) := v_n_t;
-- different replication for each row
v_repfac(1) := 3;
v_repfac(2) := 0;
v_repfac(3) := 1;
DBMS_TF.PUT_ROW_SET( rowset => v_rowset,
replication_factor => v_repfac );
END;
END;