Oracle SQL 从执行计划中检索具有表名的列名作为表

Posted

技术标签:

【中文标题】Oracle SQL 从执行计划中检索具有表名的列名作为表【英文标题】:Oracle SQL retrieve Column Names with table names from execution plan as a Table 【发布时间】:2021-12-22 07:43:33 【问题描述】:

我需要使用表名从执行计划列名中检索。我可以看到解释计划并看到投影列,但我无法从这部分检索,因为它不是表格。是否有任何表格包含任何格式的执行计划,例如 XML 或关系格式?

Additonaly : "SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY())" 这无济于事,因为这会在一列中产生结果。

【问题讨论】:

你试过DBMS_XPLAN.DISPLAY_PLAN()吗?似乎设置 type 参数可能会给你想要的东西。 【参考方案1】:

由于 DBMS_XPLAN 函数只返回 CLOB,您需要自己解析字段 - 例如:

SELECT to_number(regexp_substr(plan_table_output, '[^|]+', 1, 1)) id,
       regexp_substr(plan_table_output, '[^|]+', 1, 2) operation,
       regexp_substr(plan_table_output, '[^|]+', 1, 3) name,
       regexp_substr(plan_table_output, '[^|]+', 1, 4) "ROWS",
       regexp_substr(plan_table_output, '[^|]+', 1, 5) bytes,
       regexp_substr(plan_table_output, '[^|]+', 1, 6) cost
  from table(dbms_xplan.display)
 where instr(plan_table_output, '|') = 1
   and plan_table_output <> '| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)|';

【讨论】:

以上是关于Oracle SQL 从执行计划中检索具有表名的列名作为表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 验证表是不是存在与具有表名值的列同名

具有动态表名的 Oracle Select 查询

oracle sql用的mysql软件,查关联的表名的时候会有表名和后面的括号,如图

Oracle 查看索引信息的 SQL 语句

Oracle 查看索引信息的 SQL 语句

在oracle SQL developer中从查询列名中查找表