刚刚把系统从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而已。谁能有比较好的办法,是不是数据库参数的问题?可以在线讨论。
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而已。谁能有比较好的办法,是不是数据库参数的问题?可以在线讨论。
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;
上面红色显示的查询无论被连接多少次,结果都是正确的,主查询语句要递归到临时视图上面,而且他们都是一个状态。
假如这样
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 count(a) as a,b,sum(c) as c from tmpa group by b
union all
select a,b,c from tmpb
order by a;
这样就不行了,我才对tmpa进行分组在查询的时候,已经改变的最早with as 中对tmpa的定义,
因为在with as中多加入几个相同结构的tmpa,起不同的别名就可以了。这样虽然解决问题,但是麻烦得很 语句都要重新调试,总觉得还是能修改数据库的参数来去掉这个限制。10g都能行的,怎么到这就不行了呢???
来几个大虾呗
是不是 group by 导致某些空间不足造成的啊
等高手
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字段可能不是数字类型的吧,
只要数据类型一致,就可以实现上面的查询
一、
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,count(c) as c from tmpa group by a
union all
select count(a) as a,b,count(c) as c from tmpa group by b
union all
select a,b,c from tmpb
order by a;
二、
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,count(distinct c) as c from tmpa group by a
union all
select count(a) as a,b,count(distinct c ) as c from tmpa group by b
union all
select a,b,c from tmpb
order by a;第一种写法正确执行,第二种就出错,distinct 出现一次可以 出现两次以上就是 ora-03113了
十分不解