对于升级到10.2.0.5的警示

从Oracle 10.2.0.4升级到10.2.0.5后,发现SQL语法标准发生变化。原先在10.2.0.4中可以省略表名的情况,在10.2.0.5中必须明确指定。此变更导致应用出现错误,提示列定义模糊。升级数据库时务必进行详尽的应用测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    从10.2.0.4升级到10.2.0.5,大家都认为这是个小操作,我也这么认为,以前我都说这个只是打上了些patch,不用做应用测试的,结果这次悲剧了。

    跨版本升级,看来oracle都做了许多改动的,我碰到的这个是sql语法标准的问题

就是两个left join时,取的列相同的话在10.2.0.4里面不用在前面写上表名,10.2.0.5就需要:

在10.2.0.4里面实验

SQL>    select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production

SQL>  create table test3(a int,b int);
insert into test3 values(2,2);

create table test2(a int,c int);
insert into test2 values(2,2);

create table test1(f int,c int);

insert into test1 values(2,2);Table created.

SQL>
1 row created.

SQL> SQL>
Table created.

SQL>
1 row created.

SQL> SQL>
Table created.

SQL>

1 row created.

SQL>
SQL>
SQL> commit;

SQL> select a from test1 left join test2 on test1.f=test2.a
  2  left join test3 on test1.c=test3.b;

         A
----------
         2

在10.2.0.5里面实验:


SQL>   select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.5.0 - Productio
NLSRTL Version 10.2.0.5.0 - Production
SQL>  create table test3(a int,b int);
insert into test3 values(2,2);

create table test2(a int,c int);
insert into test2 values(2,2);

create table test1(f int,c int);

insert into test1 values(2,2);Table created.

SQL>
1 row created.

SQL> SQL>
Table created.

SQL>
1 row created.

SQL> SQL>
Table created.

SQL>

1 row created.

SQL>
SQL>
SQL> commit;

Commit complete.

SQL> select a from test1 left join test2 on test1.f=test2.a
  2  left join test3 on test1.c=test3.b;
select a from test1 left join test2 on test1.f=test2.a
       *
ERROR at line 1:
ORA-00918: column ambiguously defined

其实归根结底这是应用开发不严谨的问题,不过也提醒我们,并不是所有人的开发都是那么严谨,升级数据库切记要测试。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11088128/viewspace-688200/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11088128/viewspace-688200/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值