您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

对象相关性视图示例

本部分介绍如何使用 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 列中,您将看到两种类型的对象相关性:

  1. EXTERNAL_DIRECT:基本对象直接用于相关过程。

  1. EXTERNAL_INDIRECT:基础对象间接用于相关过程。

    要仅列出 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 