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

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

千笙结 发布于 2021-11-30 字数 2345 浏览 823 回复 4

用友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该如何优化?

报错的原因可能是什么?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦里兽 2021-12-01 4 楼

不行

傾城如夢未必闌珊 2021-12-01 3 楼

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;

用这个行不。

墨洒年华 2021-11-30 2 楼

跟踪日志看看具体是什么错误

天涯离梦残月幽梦 2021-11-30 1 楼

用友的人说可能是表空间的问题,也可能是sql太长的问题(dba和我都不认为是sql太长的问题),说可能重启服务器就好了,事实上重启完服务器还是这个问题。