问题: 某用户遇到的问题是多层嵌套查询(子查询)时,存在不识别子查询中列名称报错(ORA-00904: “DUAL”.“DUMMY”: invalid identifier)。
该应用程序已经无人维护,无法通过程序升级来改写SQL方式处理,因此需要从数据库角度对此问题进行分析并确认数据库层面是否可以解决。

分析: 经分析结合MOS文档以及实际测试,结论如下:

  1. 从ORACLE官方SUPPORT上查询(参考Table Alias Scope In Correlated Queries Works In 12c But Failed With ORA-904 In 11.2 (Doc ID 2365733.1) Incorrect Syntax Not Detected In Subquery (No ORA-904 Generated) (Doc ID 1327574.1)),这是数据库bug.即Oracle在使用2层及以上嵌套查询(子查询)时,存在不识别子查询中列名称的BUG。
    BUG 名称为Internal Bug 13573394 ORA-00904: “DISTINCT1”.“EMPLOYEEKEY”: INVALID IDENTIFIER OCCURS FROM A QUERY,为内部BUG无法查询到详细信息。
  2. MOS文档上提出的解决方案为升级到12C版本解决此问题。
    另外的解决方案是修改SQL语句,减少查询时的嵌套,或者使用视图等方式来变相实现SQL功能。

实际测试:
–在11.2.0.4版本安装Database Patch Set Update : 11.2.0.4.190115 (28729262)的数据库环境使用MOS文档中提供的测试语句,依然报错。
–在12C版本已经测试SQL可以使用。
测试LOG如下:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> SELECT (
2 SELECT *
3 FROM (
4 SELECT a.dummy
5 FROM dual a
6 WHERE a.dummy = dual.dummy
7 )
8 )
9 FROM dual;
WHERE a.dummy = dual.dummy
*
ERROR at line 6:
ORA-00904: "DUAL"."DUMMY": invalid identifier

Oracle11.2.0.4版本多层嵌套查询无法识别列名的问题_SQL