Turn on PL/Scope
ALTER SESSION SET plscope_settings='identifiers:all'
Statement processed.
Who Calls Me? Answered by PL/Scope
CREATE OR REPLACE PROCEDURE who_calls_me (pkg_in IN VARCHAR2,
prog_in IN VARCHAR2)
IS
BEGIN
FOR rec
IN (SELECT srch.object_name, srch.name
FROM user_identifiers srch, user_identifiers src
WHERE src.object_name = pkg_in
AND src.object_type = 'PACKAGE'
AND src.usage = 'DECLARATION'
AND src.name = prog_in
AND src.signature = srch.signature
AND srch.usage = 'CALL')
LOOP
DBMS_OUTPUT.put_line (
rec.object_name || ' calls ' || pkg_in || '.' || prog_in);
END LOOP;
END;
Procedure created.
Create Some Program Units
CREATE OR REPLACE PACKAGE my_pkg1
IS
PROCEDURE my_proc;
END;
Package created.
CREATE OR REPLACE PACKAGE BODY my_pkg1
IS
PROCEDURE my_proc
IS
BEGIN
NULL;
END;
END;
Package Body created.
CREATE OR REPLACE PACKAGE my_pkg2
IS
PROCEDURE my_proc;
END;
Package created.
CREATE OR REPLACE PACKAGE BODY my_pkg2
IS
PROCEDURE my_proc
IS
BEGIN
NULL;
END;
END;
Package Body created.
CREATE OR REPLACE PROCEDURE my_proc1
IS
BEGIN
my_pkg1.my_proc;
END;
Procedure created.
CREATE OR REPLACE PROCEDURE my_proc2
IS
BEGIN
my_pkg2.my_proc;
END;
Procedure created.
Check for Usages
BEGIN
who_calls_me ('MY_PKG1', 'MY_PROC');
END;
MY_PROC1 calls MY_PKG1.MY_PROC