2

我在子查询中有一个带有子查询的查询。内部子查询与外部查询的结果相关:

SELECT
    employees.ENAME,
    employees.DEPTNO,
    (
        SELECT * FROM
            (SELECT DNAME FROM DEPT WHERE DEPT.DEPTNO = employees.DEPTNO)
    ) DNAME
    FROM EMP employees 
;

对于 Oracle 10.2.0.1.0,它可以正常工作,但 Oracle 11.2.0.4.0 会引发错误:

ORA-00904: "EMPLOYEES"."DEPTNO": 无效标识符"

如果我删除中间的查询,它也适用于 Oracle 11。所以我认为这是标识符可见性的问题。

上面的代码是我的问题的简化。由于某种原因,我无法通过另一个联接解决问题,也无法使用存储过程或辅助视图。如何使此代码在单个查询中与 Oracle 11 一起使用?

4

1 回答 1

0

您可以访问 10g 版本吗?10.2.0.5?11g 对标识符的限制确实更加严格,一些查询停止工作。这些更改也被反向移植到终端补丁集 (10.2.0.5)。顺便提一句:

  • DNAME 用作列别名/名称“两次”
  • SELECT *在只能返回一列的地方使用
  • 最里面的查询没有别名

我认为 Oracle 在某种程度上对标识符名称感到困惑,并且可能错误消息具有误导性,问题出在其他地方。

关于什么:

SELECT
    employees.ENAME,
    employees.DEPTNO,
    (
        SELECT X.DNAME FROM
            (SELECT D.DNAME FROM DEPT D WHERE D.DEPTNO = employees.DEPTNO) X
    ) AS DNAME
    FROM EMP employees 
;
于 2015-02-24T10:04:08.463 回答