如何检查包中是否存在过程?

时间:2012-07-11 15:46:17

标签: oracle plsql

我有程序包,这些程序在很多地方使用,在某些地方我需要稍微不同的程序,例如:更新一列。

我认为我可以创建一个额外的包,其中包含一些但不是所有的程序。

有没有办法直接在脚本中签入if语句,如果额外包中没有程序,那么是否要退回标准包?

5 个答案:

答案 0 :(得分:12)

您应该可以从DBA_PROCEDURES视图中获取此信息:

SELECT *
  FROM SYS.DBA_PROCEDURES
  WHERE OBJECT_TYPE = 'PACKAGE' AND
        OBJECT_NAME = '<your package name>' AND
        PROCEDURE_NAME = '<your procedure name>'

如果这返回一行,则您感兴趣的过程存在于包中。如果您收到NO_DATA_FOUND异常,则表示程序包中不存在该过程。

分享并享受。

答案 1 :(得分:2)

查询SYS.DBA_PROCEDURES的用户是否需要特殊权限?也许查询SYS.User_Objects需要的权限较少?

select * from SYS.User_Objects where object_type = 'PACKAGE';

答案 2 :(得分:1)

您也可以尝试

SELECT text FROM all_source WHERE name = 'PACKAGE' ORDER BY line;

为我工作......

答案 3 :(得分:0)

如果您以普通用户身份执行代码,则根本看不到 SYS.DBA_PROCEDURES。

但是您可以从用户可访问的表 user_procedures 中执行相同操作:

SELECT * 
  FROM USER_PROCEDURES 
  WHERE OBJECT_TYPE='PACKAGE' AND 
        OBJECT_NAME ='<your package name>' AND 
        PROCEDURE_NAME = '<your procedure name>';

答案 4 :(得分:-1)

select * from USER_OBJECT where object_type='PACKAGE' AND OBJECT_NAME ='<YOUR PACKAGE NAME>'