2015-02-24 57 views
2

我在子查詢中查詢子查詢。內子查詢涉及的外部查詢結果:Oracle 10g和11g之間標識符的可見性

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它工作正常,但甲骨文11.2.0.4.0拋出一個錯誤:

ORA-00904: "EMPLOYEES"."DEPTNO": invalid identifier"

如果我刪除中間的查詢,它也適用於Oracle 11.所以我認爲這是標識符可見性的問題。

上面的代碼是我的問題的簡化。出於某種原因,我無法解決另一個連接的問題,並且我無法使用存儲過程或輔助視圖。如何在單個查詢中使此代碼與Oracle 11一起工作?

+0

請包括確切的DB版本。 – 2015-02-24 10:14:35

+0

對於'12.1.0.2'不存在問題 – 2015-02-24 10:18:31

+0

根據@LalitKumarB的回答,最好的解決方案是聯繫Oracle支持或應用11g的最新補丁集。 – ibre5041 2015-02-24 10:34:50

回答

0

你有權訪問10g版本。 10.2.0.5? 11g對標識符的限制更嚴格,一些查詢停止工作。這些更改也被移植到終端補丁集(10.2.0.5)。 BTW:

  • 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 
; 
+2

重複DNAME不是一個問題,因爲它處於不同的級別,最內層的查詢不需要別名。這些更改不會造成影響,但也不會解決問題,即'僱員'在嵌套子查詢中不可見。 – 2015-02-24 11:53:32