有没有办法列出 ORACLE 查询中使用的表和列? [复制]

Posted

技术标签:

【中文标题】有没有办法列出 ORACLE 查询中使用的表和列? [复制]【英文标题】:Is there a way to list tables and columns used in a ORACLE query? [duplicate] 【发布时间】:2018-08-26 15:51:54 【问题描述】:

我有一个庞大的 Oracle 查询(约 20k 行),我需要列出该查询中使用的所有表和列。我用谷歌搜索并发现了一些 SQL-Parser 工具和插件,但它们对我没有用。

在 perl 库下找到,但它不处理 TO_DATE 和 TO_CHAR 列。它正在抛出错误。

http://search.cpan.org/~rehsack/SQL-Statement-1.412/lib/SQL/Parser.pm

有没有其他方法可以列出查询中使用的所有表和列?

【问题讨论】:

你也许可以从查询的解释计划中得到一些细节。 要从查询中获取引用表的列表,请参阅here。您是指返回的列(容易从光标元数据中获取)还是真正使用 列(在执行计划中检查Column Projection Information)。 TO_DATETO_CHAR 不是列:它们是函数。 嗨 Marmite Bomber,您能告诉我有关列投影信息的信息以及如何获取吗? 【参考方案1】:

不确定这是否是答案,但您可以使用查询创建 VIEW。

CREATE VIEW your_view_name
AS SELECT * FROM your_table_or_complex_query;

然后使用 SYS.USER_DEPENDENCIES 表列出这些表。

select *
  from SYS.USER_DEPENDENCIES
 where type = 'VIEW'
   AND REFERENCED_TYPE IN ('VIEW', 'TABLE', 'SYNONYM')
   AND name = '<view_name>';

要列出列,您可以使用下面的查询,(此查询的问题是如果列例如 COLUMN1 存在于三个表 TAB1、TAB2、TAB3 但在您的查询中它仅来自 TAB1,这三个表会显示)

SELECT a.referenced_name, b.column_name
  FROM SYS.USER_DEPENDENCIES A, USER_TAB_COLS B, 
       (SELECT dbms_metadata.get_ddl('VIEW','<view_name>','<schema_name>') ddl_text FROM DUAL) c
 WHERE TYPE = 'VIEW'
   AND REFERENCED_TYPE IN ('VIEW', 'TABLE', 'SYNONYM')
   AND name = '<view_name>'
   AND b.table_name = a.name
   AND INSTR(lower(c.ddl_text), lower(b.column_name)) > 0
   ORDER BY referenced_name;

【讨论】:

您好,谢谢!使用这种方法,我可以检索使用的表名,但是这些表中的列呢? 哈哈,我不知道如何获取列。但我在回答中添加了一个查询,也许它可以帮助你。

以上是关于有没有办法列出 ORACLE 查询中使用的表和列? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE怎么根据字段值找出所有的表和字段?

Hibernate MySQL 查找未映射的表和列

外键列表及其在 Oracle DB 中引用的表

限制用户对 MS 访问中的表和查询的访问

如何回滚到以前的迁移并删除架构中的表和列?

如何防止 Entity Framework Core 2.0 重命名生成类中的表和列(数据库优先)