- КОД ПАКЕТА - подзапрос с минимальной функцией агрегата не работает. он не может найти таблицу. мне не очень понятно, как сделать паретеризацию имени столбца и таблицы, чтобы оно работало.
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;
- КОД ПРОЦЕДУРЫ
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;
- так я передаю значения
var c refcursor;
execute USER.TEST_PKG.SP_METRICS('DEV', 'EDW', 'DW', 'SAIL_DIM','SAIL_DATE' :c);
print c;