我在DECLARE..BEGIN..END;块中定义了几个本地函数/过程:
DECLARE
PROCEDURE a IS
BEGIN
...
END;
PROCEDURE b IS
BEGIN
...
END;
BEGIN
END;
Run Code Online (Sandbox Code Playgroud)
如何获得所有已定义函数/过程的列表?(在这个例子中:['a','b'])
正如评论中所提到的,将程序和函数放入包中会更好,然后在匿名块中调用那些打包的子程序.
此步骤将使您可以更轻松地查找,修复和维护代码.
此外,作为存储的数据库对象,您可以利用数据字典视图和其他数据库功能来分析代码.例如,如果要知道包中的所有子程序的名称,或者甚至是单个过程或函数中的嵌套/本地子程序,则可以使用PL/Scope.
ALTER SESSION SET plscope_settings='identifiers:all'
/
CREATE OR REPLACE PACKAGE my_pkg
AUTHID DEFINER
IS
FUNCTION my_function1
RETURN NUMBER;
FUNCTION my_function2
RETURN VARCHAR2;
END;
/
WITH one_obj_name AS (SELECT 'MY_PKG' object_name FROM DUAL)
SELECT LPAD (' ', 2 * (LEVEL - 1)) || usage || ' ' || name usages
FROM (SELECT ai.object_name,
ai.usage usage,
ai.usage_id,
ai.usage_context_id,
ai.TYPE || ' ' || ai.name name,
ai.line,
ai.col
FROM all_identifiers ai, one_obj_name
WHERE ai.object_name = one_obj_name.object_name)
START WITH usage_context_id = 0
CONNECT BY PRIOR usage_id = usage_context_id
/
USAGES
-----------------------------------------
DECLARATION PACKAGE MY_PKG
DECLARATION FUNCTION MY_FUNCTION1
REFERENCE NUMBER DATATYPE NUMBER
DECLARATION FUNCTION MY_FUNCTION2
REFERENCE CHARACTER DATATYPE VARCHAR2
Run Code Online (Sandbox Code Playgroud)
PL/Scope是一个非常强大的实用程序,内置于PL/SQL中.查看这些资源以获取更多信息:
Philippe Salvisberg的PL/Scope Utilities