Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle 10g和11g之间标识符的可见性_Sql_Oracle11g_Oracle10g_Ora 00904 - Fatal编程技术网

Sql Oracle 10g和11g之间标识符的可见性

Sql Oracle 10g和11g之间标识符的可见性,sql,oracle11g,oracle10g,ora-00904,Sql,Oracle11g,Oracle10g,Ora 00904,我有一个在子查询中包含子查询的查询。内部子查询与外部查询的结果相关: 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,它可以正

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

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:“员工”。“部门编号”:无效标识符

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


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

您是否可以访问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 
;

请包括确切的DB版本。根据@LalitKumarB answer,与
12.1.0.2
无关,最好的解决方案是联系Oracle支持部门或为11g应用最新补丁集。您所展示的在10.2.0.5中也不起作用,可能是因为提到了后端口ibre5041。您无法引用标识符(本例中为您的员工别名)多个级别的子查询被关闭。如果看不到更现实、不简单的示例以及您正在处理的限制,很难说如何解决它-为什么您不能加入,为什么您在示例中有多余的额外级别的子查询,您是否可以使用CTE…将Oracle版本添加到DN中AME不是问题,因为它处于不同的级别,最里面的查询不需要别名。这些更改不会造成伤害,但也不会解决问题,即
员工
在嵌套子查询中不可见。