oracle下left join查询报ora-03113:一表多字段另一表同一字段关联

caoxie 发布于 2015/06/18 19:42
阅读 321
收藏 0

用友nc的web service接口报500,跟踪代码后发现是一个sql查询报错引起的。

该sql是多个表通过left join on连接起来的。其中一个表很多字段另一个表的一个字段关联,

一查询就报 ORA-03113: 通信通道的文件结束,不过去掉case和decode或者中文就没问题。

其他sql都可以调case和decode或者包含中文。就这个sql不行。

sql总长度3506。小于pl/sql的50k和oracle的64k每行也不超过sqlplus的2099。

这个sql类似于如下sql:

select a.name

b1 .c1  ,
b2 .c2  ,
b4 .c4  ,
b5 .c5  ,
b6 .c6  ,
b8 .c8  ,
b9 .c9  ,
b10.c10 ,
b11.c11 ,
b12.c12 ,
b14.c14 ,
b15.c15 ,
b16.c16 ,
b18.c18 ,
b19.c19 ,
b20.c20 ,
b21.c21 ,
b22.c22 ,
b24.c24 ,
b25.c25 ,
b26.c26 ,
b28.c28 ,
b29.c29 ,
from table_a a
left join table_b  b1  on  b1.c  = a.c1
left join table_b  b2  on  b2.c  = a.c2
left join table_b  b4  on  b4.c  = a.c4
left join table_b  b5  on  b5.c  = a.c5
left join table_b  b6  on  b6.c  = a.c6
left join table_b  b8  on  b8.c  = a.c8
left join table_b  b9  on  b9.c  = a.c9
left join table_b  b10 on  b10.c = a.c10
left join table_b  b11 on  b11.c = a.c11
left join table_b  b12 on  b12.c = a.c12
left join table_b  b14 on  b14.c = a.c14
left join table_b  b15 on  b15.c = a.c15
left join table_b  b16 on  b16.c = a.c16
left join table_b  b18 on  b18.c = a.c18
left join table_b  b19 on  b19.c = a.c19
left join table_b  b20 on  b20.c = a.c20
left join table_b  b21 on  b21.c = a.c21
left join table_b  b22 on  b22.c = a.c22
left join table_b  b24 on  b24.c = a.c24
left join table_b  b25 on  b25.c = a.c25
left join table_b  b26 on  b26.c = a.c26
left join table_b  b28 on  b28.c = a.c28

left join table_b  b29 on  b29.c = a.c29

请教诸位大神这个sql该如何优化?

报错的原因可能是什么?

加载中
0
c
caoxie
用友的人说可能是表空间的问题,也可能是sql太长的问题(dba和我都不认为是sql太长的问题),说可能重启服务器就好了,事实上重启完服务器还是这个问题。
0
jolphin
jolphin
跟踪日志看看具体是什么错误
0
如比如比
如比如比

select a.name, 

case when b.c=a.c1 then b.c1 else NULL end as c1,

……

case when b.c=a.c29 then b.c29 else null end as c29

from tableb b, tablea a;

用这个行不。

c
caoxie
不行
返回顶部
顶部