Oracle 甲骨文表示,列的定义含糊不清,但所有列都是完全限定的

Oracle 甲骨文表示,列的定义含糊不清,但所有列都是完全限定的,oracle,oracle11g,Oracle,Oracle11g,我有两个模式,模式1和模式2。它们都包含一个名为TBL的表,TBL的DDL在两个模式中完全相同 这是我的疑问: SELECT SCHEMA1.TBL.PK_COL source_pk, SCHEMA2.TBL.PK_COL master_pk FROM SCHEMA1.TBL LEFT OUTER JOIN SCHEMA2.TBL ON SCHEMA1.TBL.PK_COL = SCHEMA2.TBL.PK_COL

我有两个模式,模式1和模式2。它们都包含一个名为TBL的表,TBL的DDL在两个模式中完全相同

这是我的疑问:

         SELECT SCHEMA1.TBL.PK_COL source_pk, SCHEMA2.TBL.PK_COL master_pk
           FROM SCHEMA1.TBL
LEFT OUTER JOIN SCHEMA2.TBL
             ON SCHEMA1.TBL.PK_COL = SCHEMA2.TBL.PK_COL
          WHERE SCHEMA1.TBL.PK_COL <= :pk_col_source_ceil
            AND SCHEMA1.TBL.MODIFY_DT >= :modify_dt_source_floor
            AND SCHEMA1.TBL.MODIFY_DT > SCHEMA2.TBL.MODIFY_DT - :modify_dt_source_lag    
/
但是我已经明确地完全限定了所有的专栏。甲骨文为什么恨我

我的Oracle版本是11.2.0.4.0。

复制错误:

09/12/2015 18:46:45:SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

09/12/2015 18:46:45:SQL> SELECT schema1.tbl.pk_col source_pk, schema2.tbl.pk_col master_pk
  2    FROM schema1.tbl
  3    LEFT OUTER JOIN schema2.tbl ON schema1.tbl.pk_col = schema2.tbl.pk_col
  4   WHERE schema1.tbl.pk_col <= 10
  5         AND schema1.tbl.modify_dt >= SYSDATE
  6         AND schema1.tbl.modify_dt > schema2.tbl.modify_dt - 1;
       AND schema1.tbl.modify_dt > schema2.tbl.modify_dt - 1
           *
ERROR at line 6:
ORA-00918: column ambiguously defined
使用别名进行测试,效果良好

09/12/2015 18:56:09:SQL> SELECT T1.PK_COL source_pk, T2.PK_COL master_pk
  2             FROM SCHEMA1.TBL T1
  3  LEFT OUTER JOIN SCHEMA2.TBL T2
  4               ON T1.PK_COL = T2.PK_COL
  5            WHERE T1.PK_COL <= 10--:pk_col_source_ceil
  6              AND T1.MODIFY_DT >= sysdate --:modify_dt_source_floor
  7              AND T1.MODIFY_DT > T2.MODIFY_DT - 1--:modify_dt_source_lag
  8  /

no rows selected
文件规定:

如果两个或多个表有共同的列名,并且 在FROM子句中指定联接,则必须限定列 具有表名或表别名的名称

有趣的是,当表名本身是公共的时,只有表别名才起作用。架构名称在这里不起作用

复制错误:

09/12/2015 18:46:45:SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

09/12/2015 18:46:45:SQL> SELECT schema1.tbl.pk_col source_pk, schema2.tbl.pk_col master_pk
  2    FROM schema1.tbl
  3    LEFT OUTER JOIN schema2.tbl ON schema1.tbl.pk_col = schema2.tbl.pk_col
  4   WHERE schema1.tbl.pk_col <= 10
  5         AND schema1.tbl.modify_dt >= SYSDATE
  6         AND schema1.tbl.modify_dt > schema2.tbl.modify_dt - 1;
       AND schema1.tbl.modify_dt > schema2.tbl.modify_dt - 1
           *
ERROR at line 6:
ORA-00918: column ambiguously defined
使用别名进行测试,效果良好

09/12/2015 18:56:09:SQL> SELECT T1.PK_COL source_pk, T2.PK_COL master_pk
  2             FROM SCHEMA1.TBL T1
  3  LEFT OUTER JOIN SCHEMA2.TBL T2
  4               ON T1.PK_COL = T2.PK_COL
  5            WHERE T1.PK_COL <= 10--:pk_col_source_ceil
  6              AND T1.MODIFY_DT >= sysdate --:modify_dt_source_floor
  7              AND T1.MODIFY_DT > T2.MODIFY_DT - 1--:modify_dt_source_lag
  8  /

no rows selected
文件规定:

如果两个或多个表有共同的列名,并且 在FROM子句中指定联接,则必须限定列 具有表名或表别名的名称

有趣的是,当表名本身是公共的时,只有表别名才起作用。架构名称在这里不起作用


你试过不用别名吗?它会起作用的。OP的问题里还有别的事。是的,我问了。这很有趣。我在Oracle12上试过,但没有发现错误。感谢您添加编辑。您尝试过不使用别名吗?它会起作用的。OP的问题里还有别的事。是的,我问了。这很有趣。我在Oracle12上试过,但没有发现错误。感谢添加编辑。