日期:2014-05-17  浏览次数:20818 次

oracle 10g 和11g的差异真的有这么大??
刚刚把系统从10g升级到11g,安装配置哪些流程大同小异,但是第一次登陆就应为11g这个区分大小写给弄迷糊了。更改参数到不区分之后,数据完全导入之后,大体运行正常。但是有些查询怎么也过不去,就是提示ora-03113 end of file for communication of channel\ora-03114这两个错误。回想一下,在10g中执行正常的语句怎么到这就不行了,跟踪才知道:
10g中用到大量的with as完成查询,因为查询太复杂,用这个方便。可是问题就来了。在11g里面简单的with as 可以正常执行,但是复杂的就不行了。比如针对临时视图进行多次分组、连接就会报错,如果只是简单的多次连接就没事
with tmpa as (select a,b,c from XXX2),
     tmpb as (select e as a,r as b,t as c from XXX1)
select a,b,c from tmpa 
 union all 
select a,b,c from tmpa
 union all
select a,b,c from tmpb
 order by a;
这样是可以的,因为终的查询没有对tmpa、tmpb进行更复杂的分组操作
with tmpa as (select a,b,c from XXX2),
     tmpb as (select e as a,r as b,t as c from XXX1)
select a,b,c from tmpa 
 union all 
select a,count(b) as b,sum(c) as c from tmpa group by a
 union all
select a,b,c from tmpb
 order by a;
这样就不行了
总结一点:对with as 产生的临时视图进行多于一次的复杂查询(如分组)就会出现这个错误。
我现在只是在多次用到tmpa的地方用其他的名字替代了,就是同样地tmpa而已。

谁能有比较好的办法,是不是数据库参数的问题?可以在线讨论。

------解决方案--------------------
没有升级到11g路过
------解决方案--------------------
不是脚本的问题
是不是 group by 导致某些空间不足造成的啊 
等高手
------解决方案--------------------
with tmpa as (select a,b,c from XXX2),
  tmpb as (select e as a,r as b,t as c from XXX1)
select a,b,c from tmpa  
 union all  
select a,count(b) as b,sum(c) as c from tmpa group by a
 union all
select a,b,c from tmpb
 order by a;

上面这样查询,你修改了查询字段的结构,count(b)是数字类型,但是 b字段可能不是数字类型的吧,
只要数据类型一致,就可以实现上面的查询