【问题标题】:List all procedures along with the tables and columns used in that procedure in Oracle列出所有过程以及 Oracle 中该过程中使用的表和列
【发布时间】:2017-10-08 00:08:43
【问题描述】:

昨晚接到我团队负责人的电话,他让我列出所有过程以及 Oracle 中使用的表和列。

我得到了一个查询,列出了所有过程以及表和 dblink,但无法获取该过程中使用的列名(如果可能,还包括 DML):

select DISTINCT OWNER, NAME, referenced_name, referenced_link_name, referenced_type 
from dba_dependencies 
where OWNER = 'OWNER_NAME';

我需要的输出如下:

  • 所有者名称
  • Procedure_Name
  • 引用名称
  • 参考链接
  • Referenced_type
  • 列名,
  • dml_type(选择/插入/更新)。

如果可能的话请帮忙..

【问题讨论】:

    标签: oracle stored-procedures data-dictionary


    【解决方案1】:

    列将位于DBA_TAB_COLUMNS

    至于 SQL 语句,这有点困难,但如果您有诊断包许可,则可行;这是大纲(适用于 11g 或更高版本):

    DBA_HIST_ACTIVE_SESS_HISTORY.top_level_sql_id是调用过程的SQL id,

    所以列出DBA_HIST_ACTIVE_SESS_HISTORY.sql_id for that top_level_sql_id 是来自过程执行的“所有”SQL。

    可以查询DBA_HIST_SQL_TEXT获取sql_id对应的sql文本。

    如果您没有诊断包,则必须为 top_level_sql_id 和 sql_id 检测 v$session,并在 v$sql 中查找文本。

    【讨论】:

    • 从 DBA_HIST_ACTIVE_SESS_HISTORY 中选择不同的 sql_id 其中 top_level_sql_id = :top_level_sql_id;
    • 从 dba_hist_sql_text 中选择 sql_text,其中 sql_id = :sql_id;
    • select column_name from dba_tab_columns where owner= :owner and table_name = :table_name;
    • 其余部分需要根据您的要求进行调整。
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 2019-04-12
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多