如何编写简单Oracle SQL查询指定表被哪些存储包引用
Oracle查询指定表被哪些存储包引用的实现方案
Oracle内置的系统依赖视图记录了所有数据库对象的依赖关系,你可以通过以下SQL实现需求,如果你没有DBA权限,可将代码中的DBA_DEPENDENCIES替换为ALL_DEPENDENCIES(仅返回你有权限访问的对象依赖)或USER_DEPENDENCIES(仅返回当前用户下的对象依赖)。
SELECT OWNER AS 包所属用户, NAME AS 存储包名称, TYPE AS 对象类型, REFERENCED_OWNER AS 被引用表所属用户, REFERENCED_NAME AS 被引用表名 FROM DBA_DEPENDENCIES WHERE REFERENCED_TYPE = 'TABLE' -- 替换为你要查询的目标表名,UPPER适配Oracle默认大写对象名的规则 AND REFERENCED_NAME = UPPER('目标表名') -- 可选条件:如果存在多用户下同名表的情况,建议加上指定表所属用户 AND REFERENCED_OWNER = UPPER('目标表所属用户名') -- 只筛选存储包,若需要包含包体引用可改为 TYPE IN ('PACKAGE', 'PACKAGE BODY') AND TYPE = 'PACKAGE' ORDER BY OWNER, NAME;
- 输出结果会返回所有引用了目标表的存储包的所属用户、包名等信息
- 如果你创建表时手动加了双引号指定了小写表名,去掉
UPPER()函数直接填实际表名即可 - 若执行报错提示视图不存在,替换
DBA_DEPENDENCIES为ALL_DEPENDENCIES即可
内容的提问来源于stack exchange,提问作者HamsterBoomer
相关产品推荐
相关产品推荐

