我有程序包,这些程序在很多地方使用,在某些地方我需要稍微不同的程序,例如:更新一列。
我认为我可以创建一个额外的包,其中包含一些但不是所有的程序。
有没有办法直接在脚本中签入if
语句,如果额外包中没有程序,那么是否要退回标准包?
答案 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>'