OBJECT_DEPENDENCIES 系统视图
此视图提供了有关对象之间依赖关系的信息,哪些视图引用了特定的表。
建模的时候,理解对象之间的依赖关系是非常重要的。例如,如果你正在考虑修改一个表,你需要知道哪些视图、存储过程或其他对象可能会被影响。
OBJECT_DEPENDENCIES 系统视图可以帮助识别这些依赖关系,从而更好地管理模型。这个视图包含了诸如对象名称、对象类型(如表或视图),依赖对象的名称和类型等信息。
列名称 | 描述 |
---|---|
BASE_SCHEMA_NAME | 基础对象的模式名称 |
BASE_OBJECT_NAME | 基础对象的对象名称 |
BASE_OBJECT_TYPE | 基础对象的类型 |
DEPENDENT_SCHEMA_NAME | 依赖对象的模式名称 |
DEPENDENT_OBJECT_NAME | 依赖对象的对象名称 |
DEPENDENT_OBJECT_TYPE | 依赖对象的类型 |
DEPENDENCY_TYPE | 基础对象和依赖对象之间的依赖类型 |
如何使用这个视图,我们来看具体的例子。
需求一:我想要知道我的视图用了哪些模型和底表
那么代码可以这么写。
其中BASE_SCHEMA_NAME和BASE_OBJECT_NAME是引用的底表或模型,BASE_OBJECT_TYPE是类型。
根据官网的说法,可以更详细地理解 DEPENDENCY_TYPE 列
显示的对象包括持久对象和临时对象。
可以使用 DEPENDENCY_TYPE 列来区分这些对象依赖类型,如下:
EXTERNAL_DIRECT:基础对象直接用在依赖的过程中。
EXTERNAL_INDIRECT:基础对象并未直接用在依赖的过程中。
所以如果 DEPENDENCY_TYPE=1则表示直接引用了查询对象,其余则是跨层级引用了。
SELECT * FROM "SYS"."OBJECT_DEPENDENCIES"
WHERE
DEPENDENT_OBJECT_NAME = '视图名称'
需求二:我想要知道我的底表被哪些模型用了
其实跟上边的代码差不多,只是上边是根据DEPENDENT_SCHEMA_NAME取BASE相关信息,这里是根据BASE_OBJECT_NAME取相关的DEPENDENT信息。
SELECT *
FROM "SYS"."OBJECT_DEPENDENCIES"
WHERE
BASE_OBJECT_NAME = '模型'
AND LOCATE(DEPENDENT_OBJECT_NAME,'hier')=0 --层次结构,包括字段,我们这里取模型故过滤
AND DEPENDENT_SCHEMA_NAME!='PUBLIC' --PUBLIC存放的是Synonym类型,不是我们的view
ORDER BY DEPENDENCY_TYPE ASC
上边有过滤Synonym类型,什么是Synonym呢?其实之前也没有特别关注过,根据官网的定义:
A synonym is an alternative name for a database table. You can use synonyms, for example, in order to shorten long or complicated table names.
Within a database schema, each synonym needs to have a unique name that is different from all other table names.
synonym同义词 使用 同义词是数据库表的另一个名称。例如,你可以使用同义词来缩短长的或复杂的表名。
在数据库模式中,每个同义词都需要有一个独特的名称,与所有其他表名都不同。
同义词是数据库中的一种对象,可以为表、视图、序列、存储过程、函数等数据库对象提供别名。这样,用户就可以使用这个别名来引用原始对象,而无需知道对象的实际名称或位置。这在处理复杂的数据库结构或跨模式访问时非常有用。