Reputation: 337
I've a requirement like , I need to get all the function names inside a package. Actually I'm a SQL Server guy. I'm new to Oracle. In SQL Server I've options like view dependencies so that i can get all dependencies. is there any way to get all function names inside a package in oracle.
Thanks for your comments.
Upvotes: 1
Views: 5108
Reputation: 838
In Oracle 23c or perhaps a few previous versions, this query will show all functions and procedures in all packages and the schema
itself. Features:
METHOD_TYPE
determines is a FUNCTION
or PROCEDURE
.METHOD_PARENT_TYPE
: determines if the parent is a PACKAGE
the SCHEMA
METHOD_CONTAINER_NAME
: if method is contained in a package, then the package name, else the schema name (owner)SELECT
-- owner is schema
P.OWNER SCHEMA_NAME
, CASE WHEN P.OBJECT_TYPE IN ('PACKAGE') THEN p.OBJECT_NAME ELSE p.OWNER END METHOD_CONTAINER_NAME
, CASE WHEN P.PROCEDURE_NAME IS NULL THEN P.OBJECT_NAME ELSE P.PROCEDURE_NAME END METHOD_NAME
, CASE WHEN P.OBJECT_TYPE IN ('PACKAGE') THEN 'PACKAGE' ELSE 'SCHEMA' END METHOD_PARENT_TYPE
-- when no return param, then must be a procedure
, CASE WHEN A.OBJECT_ID IS NULL THEN 'PROCEDURE' ELSE A.METHOD_TYPE END METHOD_TYPE
, P.*
, A.*
FROM ALL_PROCEDURES P
LEFT JOIN (SELECT A1.OWNER, A1.OBJECT_ID, CASE WHEN MIN(A1.POSITION) = 0 THEN 'FUNCTION' ELSE 'PROCEDURE' END METHOD_TYPE, COUNT(A1.OBJECT_ID) PARAM_COUNT
FROM ALL_ARGUMENTS A1
GROUP BY A1.OWNER, A1.OBJECT_ID) A ON P.OWNER = A.OWNER AND P.OBJECT_ID = A.OBJECT_ID
WHERE P.OBJECT_TYPE IN ('FUNCTION', 'PROCEDURE', 'PACKAGE')
AND P.OWNER = 'MAIN'
AND ((
--ALL_PROCEDURES has an extra row for every package, like a package level header but procedure_name is null, eliminate this
P.OBJECT_TYPE = 'PACKAGE' AND PROCEDURE_NAME IS NOT NULL) OR P.OBJECT_TYPE IN ('FUNCTION', 'PROCEDURE'))
Upvotes: 0
Reputation: 6649
You can query ALL_PROCEDURES
& USER_PROCEDURES
views to get the list of functions and procedures inside a package.
Try like this,
SELECT object_name package_name,
procedure_name
FROM user_procedures
WHERE object_name = '<PACKAGE_NAME>';
Upvotes: 3