如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]

Posted

技术标签:

【中文标题】如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]【英文标题】:How to find all table references from Oracle 10G PL/SQL functions and procedures? [duplicate] 【发布时间】:2010-07-23 19:18:13 【问题描述】:

如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用?

我绝对可以执行以下SQL语句:

select * from dba_source where text like '%tbl_c%'

但我想知道如何找到所有调用引用表的函数的函数。例如,我可以有一个函数 A 调用使用表 tbl_c 的函数 B。如果我执行上述 SQL,我会找到函数 B,但我必须执行另一个 SQL 才能找到 A。如您所知,圈复杂度可能是 3、4、5 级甚至更高。

非常感谢您的解释。

【问题讨论】:

【参考方案1】:

dba_dependencies 是开始的地方。示例:

 SELECT      owner
             || '.'
             || NAME
             || ' ('
             || DECODE (TYPE,
                        'MATERIALIZED VIEW', 'MV',
                        'DIMENSION', 'DIM',
                        'EVALUATION CONTXT', 'EVALCTXT',
                        'PACKAGE BODY', 'PKGBDY',
                        'CUBE.DIMENSION', 'CUBE.DIM',
                        TYPE
                       )
             || ')' objdep,
                referenced_name
             || ' ('
             || DECODE (referenced_type,
                        'EVALUATION CONTXT', 'EVALCTXT',
                        'NON-EXISTENT CONTXT', 'NO-EXIST',
                        'PACKAGE BODY', 'PKGBDY',
                        'CUBE.DIMENSION', 'CUBE.DIM',
                        referenced_type
                       )
             || ')' refr
        FROM dba_dependencies
       WHERE owner = :usn
    ORDER BY objdep;

【讨论】:

【参考方案2】:

在查找对象引用而不是 ALL_SOURCE 时,我更喜欢使用 ALL_DEPENDENCIES。添加到分层查询中,您可以获得所需的任何内容。

【讨论】:

以上是关于如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java 中使用 jdbc 为 oracle 10g 执行 log miner PL/SQL 查询

如何一键提示两个命令? pl/sql oracle 10g 表单生成器

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?

oracle 10g pl/sql 有条件的循环选择

过程或函数 (Pl/sql)

Oracle pl sql 10g - 将一组行从表移动到具有相同结构的历史表