【问题标题】:Find which oracle database object inserts data into a particular table?查找哪个 oracle 数据库对象将数据插入到特定表中?
【发布时间】:2016-04-15 17:40:18
【问题描述】:

我想查找将数据插入特定表的存储过程、包、函数或触发器的名称,是否有任何内置对象以便我可以使用它。我正在搜索过去 2 小时内的对象名称。请帮忙。

【问题讨论】:

    标签: oracle stored-procedures oracle11g toad


    【解决方案1】:

    您可以尝试通过以下方式分析数据库的所有来源:

    select *
    from dba_source
    where upper(text) like '%TABLE_NAME%'
    

    这种方法的优点是您可以获得动态代码;缺点是你甚至可以选择、更新……

    【讨论】:

      【解决方案2】:

      如果表是静态引用的,您可以查看ALL_DEPENDENCIES 视图

      SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_NAME = '<your table>';
      

      这将找到所有用法,而不仅仅是插入

      您也可以在源代码中搜索:

      SELECT * FROM ALL_SOURCE WHERE UPPER(TEXT) LIKE '%INSERT%<your table>%'
      

      仅当INSERT 和您的表在同一行时,才会找到用法。

      但是,如果命令构建得更加动态,那么您将不会发现它那么简单。

      【讨论】:

        【解决方案3】:

        您无法找到插入的 PL/SQL 块,但您可以尝试识别引用它的过程/函数。并增加您找到的机会。

        select 
           proc_syn.nam,
           proc_syn.referenced_owner, 
           proc_syn.referenced_name, 
           proc_syn.referenced_type,
           syn_tab.table_name
        from 
           dba_dependencies proc_syn, dba_synonyms syn_tab, dba_tables tables
        where 
              REFERENCED_TYPE in ( 'SYNONYM','TABLE')
          AND proc_syn.referenced_name = syn_tab.synonym_name
          AND syn_tab.synonym_name = tables.table_name
          AND syn_tab.owner = 'PUBLIC'
          AND REFERENCED_NAME = 'YOUR_TABLE_NAME'
        order by 
          proc_syn.referenced_owner, syn_tab.table_name;
        

        上述查询将返回引用此表的表对象。

        注意,当您仅使用 STATIC 查询时,这将返回。任何动态查询,都完全失控。

        【讨论】:

          【解决方案4】:

          您可以使用 user_source 或 user_dependencies 表,如下所示。

          1. 使用表user_source

            select  * from user_source
            where upper(text) like '%<YOUR TABLE NAME in UPPER CASE>%'
            

            您可以根据您登录的用户和该用户的权限从 user_source 、 all_source 、 dba_source 中进行选择。

          2. 使用表user_dependencies

            SELECT NAME FROM user_dependencies WHERE referenced_name = '<YOUR TABLE NAME in UPPER CASE>'
            UNION
            SELECT referenced_name FROM user_dependencies WHERE name = '<YOUR TABLE NAME in UPPER CASE>'
            

            您可以根据您登录的用户和该用户拥有的权限从 user_dependencies 、 all_dependencies 、 dba_dependencies 中进行选择。

          【讨论】:

            猜你喜欢
            • 2021-12-20
            • 2011-01-24
            • 2020-04-08
            • 1970-01-01
            • 2015-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多