CORE/views/obj_packages.sql
2022-01-25 17:19:39 +01:00

46 lines
1.2 KiB
SQL

CREATE OR REPLACE VIEW obj_packages AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_item('$PACKAGE_NAME') AS package_name
FROM DUAL
),
s AS (
SELECT
s.name AS package_name,
COUNT(*) AS count_lines
FROM user_source s
WHERE s.type = 'PACKAGE BODY'
GROUP BY s.name
),
f AS (
SELECT
a.package_name,
SUM(CASE WHEN a.position = 0 THEN 1 ELSE 0 END) AS count_functions
FROM user_arguments a
GROUP BY a.package_name
)
SELECT
p.object_name AS package_name,
--
COUNT(p.procedure_name) - MIN(f.count_functions) AS count_procedures,
--
MIN(f.count_functions) AS count_functions,
MAX(s.count_lines) AS count_lines,
MAX(o.last_ddl_time) AS last_ddl_time,
--
-- dependencies?
--
NULL AS desc_
FROM user_objects o
CROSS JOIN x
JOIN user_procedures p
ON p.object_name = o.object_name
AND o.object_type = 'PACKAGE'
JOIN s
ON s.package_name = p.object_name
LEFT JOIN f
ON f.package_name = p.object_name
WHERE o.object_name = NVL(x.package_name, o.object_name)
GROUP BY p.object_name;