本部分介绍如何使用 OBJECT_DEPENDENCIES 系统视图查询对象相关性。
在本部分中,您将了解如何有效利用 OBJECT_DEPENDENCIES 系统视图检验对象相关性。
首先创建以下数据库对象和过程:
CREATE SCHEMA deps;
CREATE TYPE mytab_t AS TABLE (id int, key_val int, val int);
CREATE TABLE mytab1 (id INT PRIMARY KEY, key_val int, val INT);
CREATE TABLE mytab2 (id INT PRIMARY key, key_val int, val INT);
CREATE PROCEDURE deps.get_tables(OUT outtab1 mytab_t, OUT outtab2 mytab_t) LANGUAGE SQLSCRIPT READS SQL DATA AS
BEGIN
outtab1 = SELECT * FROM mytab1;
outtab2 = SELECT * FROM mytab2;
END;
CREATE PROCEDURE deps.my_proc (IN val INT, OUT outtab mytab_t) LANGUAGE SQLSCRIPT READS SQL DATA
AS
BEGIN
CALL deps.get_tables(tab1, tab2);
IF :val > 1 THEN
outtab = SELECT * FROM :tab1;
ELSE
outtab = SELECT * FROM :tab2;
END IF;
END;
浏览对象相关性
要标识与 DEPS.GET_TABLES 过程关联的所有直接和间接基本对象,请执行以下语句:
SELECT * FROM OBJECT_DEPENDENCIES WHERE dependent_object_name = 'MY_PROC' and dependent_schema_name = 'DEPS';结果将显示如下:
BASE_SCHEMA_NAMEBASE_OBJECT_NAMEBASE_OBJECT_TYPEDEPENDENT_SCHEMA_NAMEDEPENDENT_OBJECT_NAMEDEPENDENT_OBJECT_TYPEDEPENDENCY_TYPE系统MYTAB_TTABLEDEPSGET_TABLES过程1系统MYTAB1TABLEDEPSGET_TABLES过程2系统MYTAB2TABLEDEPSGET_TABLES过程2DEPSGET_TABLES过程DEPSGET_TABLES过程1
在 DEPENDENCY_TYPE 列中,您将看到两种类型的对象相关性:
要仅列出 DEPS.MY_PROC 中使用的基本对象,请运行以下命令:
SELECT * FROM OBJECT_DEPENDENCIES WHERE dependent_object_name = 'MY_PROC' and dependent_schema_name = 'DEPS' and dependency_type = 1;产生的输出如下所示:
BASE_SCHEMA_NAMEBASE_OBJECT_NAMEBASE_OBJECT_TYPEDEPENDENT_SCHEMA_NAMEDEPENDENT_OBJECT_NAMEDEPENDENT_OBJECT_TYPEDEPENDENCY_TYPE系统MYTAB_TTABLEDEPSMY_PROC过程1DEPSGET_TABLES过程DEPSMY_PROC过程1
最后,要查找使用 DEPS.MY_PROC 的所有相关对象,请使用以下语句:
SELECT * FROM OBJECT_DEPENDENCIES WHERE base_object_name = 'GET_TABLES' and base_schema_name = 'DEPS' ;结果将为:
BASE_SCHEMA_NAMEBASE_OBJECT_NAMEBASE_OBJECT_TYPEDEPENDENT_SCHEMA_NAMEDEPENDENT_OBJECT_NAMEDEPENDENT_OBJECT_TYPEDEPENDENCY_TYPEDEPSGET_TABLES过程DEPSMY_PROC过程1