Interne Package Prozeduren und Funktionen als View auflisten
CREATE OR REPLACE function EDV.f_extract_proc_name(p_zeile varchar, p_typ char) return varchar2 is
-- ***********************************************************************************************
-- NAME f_extract_proc_name
--
-- DESCRIPTION Ermittelt aus einer source Zeile (aus all_source) mit type = 'PACKAGE BODY'
-- den Typ oder den Namen internenr Proceduren/Funktionen
-- ohne Parameter in Abhängikeit von p_typ
--
-- PARAMETER: p_zeile
-- p_typ 'N' -> der Name der Procedure/Function wird ermittelt
-- oder 'T' -> der Typ (PROCEDURE oder FUNCTION) wird ermittelt
--
--
-- RETURNS p_typ='N' -> Namen der Procedure/Function ohne Parameter
-- p_typ='T' -> PROCEDURE oder FUNCTION
--
--
-- CREATED 08.11.2011 Gregor Neveling
--
-- ***********************************************************************************************
v_pos number;
v_zeile varchar2(4000);
r_zeile varchar2(4000);
i number;
begin
if p_typ = 'T' then
if ltrim(upper(p_zeile)) like 'PROCEDURE %' then
return('PROCEDRUE');
elsif ltrim(upper(p_zeile)) like 'FUNCTION %' then
return('FUNCTION');
else
return(null);
end if;
elsif p_typ = 'N' then
if ltrim(upper(p_zeile)) like 'PROCEDURE %' then
v_zeile := upper(substr(ltrim(p_zeile), 11,255));
i := 1;
while i <= length(v_zeile) and substr(v_zeile,i ,1) not in (chr(10), chr(40))
loop
r_zeile := r_zeile||substr(v_zeile,i ,1);
i := i + 1;
end loop;
return ltrim(rtrim(r_zeile));
elsif ltrim(upper(p_zeile)) like 'FUNCTION %' then
v_zeile := upper(substr(ltrim(p_zeile), 10,255));
i := 1;
while i <= length(v_zeile) and substr(v_zeile,i ,1) not in (chr(10), chr(40))
loop
r_zeile := r_zeile||substr(v_zeile,i ,1);
i := i + 1;
end loop;
return ltrim(rtrim(r_zeile));
else
return(null);
end if;
else
return(null);
end if;
end;
/
CREATE OR REPLACE FORCE VIEW v_package_procs (owner, NAME, typ, soname)
AS
SELECT owner, NAME, f_extract_proc_name (text, 'T') typ,
f_extract_proc_name (text, 'N') soname
FROM all_source
WHERE owner = 'EDV'
AND TYPE = 'PACKAGE BODY'
AND ( LTRIM (UPPER (text)) LIKE 'PROCEDURE %'
OR LTRIM (UPPER (text)) LIKE 'FUNCTION %'
);