我在子查询中查询子查询。内部子查询与外部查询的结果有关:
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:"员工"。" DEPTNO":无效的标识符"
如果我在中间删除查询,它也适用于Oracle 11.所以我认为这是标识符可见性的问题。
上面的代码简化了我的问题。出于某种原因,我无法通过其他连接来解决问题,并且我无法使用存储过程或辅助视图。如何在单个查询中使此代码与Oracle 11一起使用?
答案 0 :(得分:0)
您是否可以访问10g版本。 10.2.0.5? 11g对标识符的限制更多,一些查询停止工作。这些更改也被反向移植到终端补丁集(10.2.0.5)。顺便说一句:
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
;