确定存储过程是否存在于任何地方?

时间:2012-01-27 15:32:19

标签: oracle stored-procedures

这是一个Oracle问题。

我需要编写一个给定名称的pl / sql函数,并确定它是否对应于任何可调用的存储过程。也就是说,名称可以是以下任何一种形式:

somename - 可以是当前模式中的过程,也可以是其他过程的同义词 firstpart.secondpart - 可能意味着包第一部分(在当前模式中或同义词中),其中包含proc第二部分,或者它可能意味着用户第一部分和第二部分程序 first.second.third - 大概是指用户优先,封装第二,第三步骤

(我认为这些都是可能的。)

我可以逐个查看每个可能性,查看all_synonyms和all_procedures,但有没有更好的方法让Oracle完成大部分工作?即如果它不存在,试图调用该程序并捕获该异常?不幸的是,我注意到调用一个过程(通过一个开始; EXECUTE IMMEDIATE中的结束块)返回相同的错误,-6550,当我尝试一个不存在的过程的名称(在一个包中)当我尝试使用错误参数的有效过程时。

建议?

1 个答案:

答案 0 :(得分:0)

我不建议尝试调用该过程,因为如果调用成功,则会发生该过程的所有副作用。更好的恕我直言,以查询元数据。

分享并享受。