📜  oracle all_dependencies - SQL (1)

📅  最后修改于: 2023-12-03 15:03:23.466000             🧑  作者: Mango

Oracle all_dependencies - SQL

介绍

在 Oracle 数据库中, all_dependencies 视图提供了表、视图、程序包、过程等对象之间的依赖关系信息。该视图可以帮助程序员在编写 SQL 语句或 PL/SQL 代码时,了解当前对象的依赖关系,从而方便找到相关联的对象、识别依赖循环等问题。

使用方法

可以使用以下 SQL 语句查询 all_dependencies 视图:

SELECT *
FROM all_dependencies
WHERE referenced_name = '<OBJECT_NAME>';

其中,<OBJECT_NAME> 是要查询依赖关系的对象名称,可以是表、视图、程序包、过程等。

如果想要查询所有对象之间的依赖关系,可以省略 WHERE 子句。

示例

假设有一个表 orders

CREATE TABLE orders (
    order_id NUMBER,
    customer_id NUMBER,
    order_date DATE,
    total_price NUMBER
);

现在想要查询该表的所有依赖关系,可以执行以下 SQL 语句:

SELECT *
FROM all_dependencies
WHERE referenced_name = 'ORDERS';

执行结果如下:

|OWNER|NAME|TYPE|REFERENCED_OWNER|REFERENCED_NAME|REFERENCED_TYPE|DEPENDED_OWNER|DEPENDED_NAME|DEPENDED_TYPE|DEPENDENCY_TYPE| |---|---|---|---|---|---|---|---|---|---| |SCOTT|ORDERS|TABLE| | | |SCOTT|ORDERS|TABLE|HARD|

可以看到,该表没有依赖任何其他对象。如果查询所有对象之间的依赖关系,可以省略 WHERE 子句:

SELECT *
FROM all_dependencies;
注意事项
  • all_dependencies 视图列出了所有类型对象之间的依赖关系,包括:表、视图、函数、存储过程、包等。
  • 本视图只列出了当前用户下的依赖关系,如果要查询其他用户下的依赖关系,需要查询 dba_dependencies 视图。
  • 很多系统视图中的信息都是动态生成的,因此在查询时,需要用到较为底层的访问权限,如 SELECT ANY TABLESELECT ANY DICTIONARY 等。
  • 在修改依赖关系较为复杂的场景下(如删除一个程序包、修改一个函数等),需要谨慎修改对象之间的依赖关系,避免引起系统崩溃等问题。
参考链接