--PACKAGE CODE-- the subquery with min aggregate funtion does not work. it can not find table. it is not very clear to me how to paremeterized the column and table name to make it work.
CREATE OR REPLACE PACKAGE TEST_PKG IS
PROCEDURE SP_METRICS
(
p_ENVIRONMENT IN VARCHAR2,
p_DATABASE IN VARCHAR2,
p_SCHEMA IN VARCHAR2,
p_TABLE_NAME IN VARCHAR2,
p_DATE_COLUMN IN VARCHAR2,
o_TABLE_BASELINE OUT SYS_REFCURSOR
);
END TEST_PKG;
--PROCEDURE CODE
CREATE OR REPLACE PACKAGE BODY TEST_PKG AS
PROCEDURE SP_METRICS
(
p_ENVIRONMENT IN VARCHAR2,
p_DATABASE IN VARCHAR2,
p_SCHEMA IN VARCHAR2,
p_TABLE_NAME IN VARCHAR2,
p_DATE_COLUMN IN VARCHAR2,
o_TABLE_BASELINE OUT SYS_REFCURSOR
) AS
BEGIN
OPEN o_TABLE_BASELINE FOR
SELECT
t.num_rows BASELINE_ROW_COUNT,
NVL(max(
(
SELECT
round( (nvl(SUM(e.bytes),0) / 1048576),2)
FROM
dba_extents e
WHERE
e.segment_type LIKE '%TABLE%'
AND e.owner = t.owner
AND e.segment_name = t.table_name
GROUP BY
e.owner,e.segment_name
)
),0) BASELINE_TABLE_SIZE,
NVL( SUM( (
SELECT
round( (nvl(SUM(extd.bytes),0) / 1048576),2)
FROM
dba_extents extd
WHERE
extd.segment_type like ('%INDEX%')
AND indx.owner = extd.owner
AND indx.index_name = extd.segment_name
AND indx.tablespace_name = extd.tablespace_name
GROUP BY
extd.owner,extd.segment_name
) ),0) BASELINE_INDEX_SIZE,
(SELECT MIN(p_DATE_COLUMN)FROM p_TABLE_NAME)--THIS DOES NOT WORK- SAY UNDIFINED TABLE
FROM
all_indexes indx RIGHT JOIN
dba_all_tables t ON indx.table_owner = t.owner AND indx.table_name = t.table_name
WHERE t.owner = p_SCHEMA
AND t.table_name = p_TABLE_NAME
GROUP BY
SYSDATE,
'EDW',
t.owner,
t.table_name,
t.num_rows;
END SP_METRICS;
END TEST_PKG;
--this is how i pass the values
var c refcursor;
execute USER.TEST_PKG.SP_METRICS('DEV', 'EDW', 'DW', 'SAIL_DIM','SAIL_DATE' :c);
print c;