Oracle 11g上的select子句中的双/随机别名不会引发无效的标识符异常

时间:2015-06-04 06:51:01

标签: sql oracle oracle11g

昨天我在客户Oracle 10g实例上偶然发现了一些奇怪的行为。我写的一些程序给了我一个invalid identifier异常但在我的Oracle 11g实例上运行正常。

相关查询如下:

select b.b.v_col_b 
from tbla a
left join tblb b on a.pk_col_a = b.fk_a;

请注意查询的 b.b.v_col_b 部分。从left join更改为inner join最终导致ORA-00904: "B"."B"."V_COL_B": invalid identifier例外,但是:

  1. 这不是语法错误吗?
  2. 有人可以解释这种行为吗?
  3. 可在sqlfiddle

    上找到工作演示

    编辑:添加了表格定义:

    create table tbla (
      pk_col_a int primary key, 
      v_col_a varchar2(50));
    
    create table tblb (
      pk_col_b int primary key, 
      fk_a int, 
      v_col_b varchar2(50));
    

    Edit2:正如@LalitKumarB所提到的那样,这似乎只发生在Oracle 11g上

1 个答案:

答案 0 :(得分:0)

  

ORA-00904:" B"。" B"。" V_COL_B":无效标识符

在SQL中,限定标识符 X.Y.Z涉及方案X,表Y和列Z.而简单的Y.Z表示表Y,列Z.

然后调用X.Y.Z标识符可能会产生误导,但在计算机科学中也不会太不规范。

关于您遇到的错误行为,我说不出多少。