我希望能够向Oracle查询属于某个包的公共过程和函数的列表,这些内容类似于:
select procedure_name from all_package_procedures where package_name = :my_package_name;
我还希望能够查询Oracle以获取给定过程或函数的参数列表,其中包括:
select parameter_name, in_or_out, parameter_type from all_function_parameters where function_name = :my_function_name;
这可能是原生的吗?如果没有,有没有人知道现有的代码来实现这个目标吗?
答案 0 :(得分:3)
您可以查询USER_OBJECTS
& USER_PROCEDURES
获取所有程序的列表&属于特定包的函数
SELECT procedure_name
FROM user_procedures
WHERE object_id = (SELECT object_id
FROM user_objects
WHERE object_name = '<YOUR-PACKAGE-NAME>'
AND object_type = 'PACKAGE')
替换user_objects
&amp; user_procedures
与all_objects
&amp; all_procedures
分别用来获取包&amp;其他用户拥有的程序。
我还希望能够向Oracle查询给定过程或函数的参数列表,
为此,您可以查询user_arguments
或all_arguments
以获取当前用户所拥有的对象的参数&amp;所有用户分别
SELECT argument_name,
data_type
FROM user_arguments
WHERE package_name = '<name-of-your-package-procedure-function>'
答案 1 :(得分:1)
我自己的答案,来自Sathyas,供其他人参考。这是一个单独的查询,用于为给定包提取所有过程及其参数的非规范化结果:
select p.procedure_name
, a.argument_name
, a.data_type
, a.defaulted
, a.default_value
, a.in_out
, a.position
from all_procedures p
inner join all_objects o
on o.object_id = p.object_id
inner join all_arguments a
on a.package_name = o.object_name
and a.object_name = p.procedure_name
where o.object_type = 'PACKAGE'
and o.object_name = 'PACKAGE_NAME'
order by p.procedure_name, a.position;