第二层子查询居然不认最外层表中的列,网上查了一把发现有人也遇到这种情况,但没说明具体是为什么,不得其解,放上来请教高手
以下引用别人的提问,和我的情况一样:
我们碰到了一个问题,在oracle 10g 64 bit里使用超过两层的子查询出错,提示Ora-00904,但是在32bit的oracle 中却可以正常运行,问题如下:(原问题并非如此,作了简化)
表A1
create table A1
(
PERIOD_ID VARCHAR2(20),
CORP_ID VARCHAR2(20),
TTL1 NUMBER,
TTL2 NUMBER
);
表中的数据
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200601', 'A101', 3, 5);
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200602', 'A101', 2, 8);
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200601', 'A102', 1, 1);
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200602', 'A102', 3, 3);
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200603', 'A101', 7, 7);
insert into A1 (PERIOD_ID, CORP_ID, TTL1, TTL2)
values ('200603', 'A102', 8, 9);
commit;
查询语句:
select * from a1 t
where exists
(select 'X' from (select w2.CORP_ID
from a1 w2
where w2.period_id <= t.period_id) u
where u.corp_id = t.corp_id);
该语句在32bit oracle中运行正常,但是发布到生产环境Oracle 10g 64bit中出错,提示
Ora-00904 标识符无效
出错的Oracle 64bit 版本为
select * from v$version;
1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
2 PL/SQL Release 10.2.0.1.0 - Production
3 CORE 10.2.0.1.0 Production
4 TNS for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Productio
5 NLSRTL Version 10.2.0.1.0 - Production
Oralcle 32bit平台如下:(在这个版本下运行正常)
1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
2 PL/SQL Release 10.2.0.1.0 - Production
3 CORE 10.2.0.1.0 Production
4 TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
5 NLSRTL Version 10.2.0.1.0 - Producti
请问那位大侠碰到过此问题,垦请赐教