Oracle 甲骨文表示,列的定义含糊不清,但所有列都是完全限定的
我有两个模式,模式1和模式2。它们都包含一个名为TBL的表,TBL的DDL在两个模式中完全相同 这是我的疑问: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
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上试过,但没有发现错误。感谢添加编辑。