如何检索包中的方法类型?

时间:2019-05-28 06:15:50

标签: sql oracle plsql oracle12c

如何在包中获取方法的类型(无论是函数还是过程)?

CREATE OR REPLACE PACKAGE SAMPLE_PACKAGE IS

PROCEDURE procedure1;

PROCEDURE procedure2;

FUNCTION function1(
  key_           IN VARCHAR2) RETURN BOOLEAN;

END SAMPLE_PACKAGE;

我的程序包将是这样,它将具有多个功能和过程。

我使用user_arguments和user_procedures表尝试了诸如How do I differentiate between Procedures and Functions in Oracle's Metadata?之类的示例,但是对于大型数据集,这似乎代价很高

SELECT up.object_name, up.procedure_name, up.overload,
CASE WHEN ua.object_id IS NULL THEN 'PROCEDURE' ELSE 'FUNCTION' END AS method_type
FROM user_procedures up LEFT JOIN user_arguments ua ON ( ua.object_id = up.object_id
         AND ua.subprogram_id = up.subprogram_id AND ua.position = 0 )
WHERE up.object_name = 'MY_OBJECT';

1 个答案:

答案 0 :(得分:0)

select object_name, object_type, name, type
from user_identifiers
where  object_type like 'PACKAGE%'
and usage in ('DECLARATION', 'DEFINITION')
and type in ('FUNCTION', 'PROCEDURE');

此简单查询返回所有用户定义的程序包。随时过滤掉您的需求。