视图的疑惑 之 ORA-03113: 通信通道的文件结束

近日写一个视图,有一点以前没弄过的是:要根据主表A(视图记录数同该表记录数)的id查找表B中的B.yxbm,然后根据这个yxbm得到C表的yxmc。注意,A ---> B 属于1对多。
最后要的效果是将多个yxmc组织成一个值,放入视图(去掉重复记录)。
数据库是Oracle 10g .第一个版本的视图如下(只取上面介绍的一个字段,其他字段省略):
create or replace view view_cgjdcx
as
select cgzb.id,cgzb.cgdh as cgdh,
(select wmsys.wm_concat(cb.bmmc||'#/##/###/#/#/#/##/#') as yxmc
from (
select temp.zbid,dept.bmmc from B temp, C dept where temp.yxbm = dept.id group by temp.zbid,dept.bmmc
) cb
where cb.zbid = cgzb.id
) as yxmc
from A cgzb

上面的代码在公司测试通过,兴高采烈的去客户那里发布,结果出人意料:用yxmc这个条件来搜索视图的list集合时报错,但是却可以查找总记录数。没办法,找原因,最后发现是sql语句执行错误——这样的sql语句即使在pl/sql也执行不了(ORA-03113: 通信通道的文件结束)。
经过一步步的排查,发现问题在于
group by temp.zbid,dept.bmmc
。这个分组是用来去掉重复数据的,没办法,换一种方式
(select wmsys.wm_concat( distinct cb.bmmc||'#/##/###/#/#/#/##/#') as yxmc
from (
select temp.zbid,dept.bmmc from dzcg_cg_cb temp, eam_department dept where temp.yxbm = dept.id
) cb
where cb.zbid = cgzb.id

) as yxmc

终于可以了。

不过,不明白为什么。网上说这种错误的原因很多,而这里我想不出什么所以然来,补丁不一致?操作系统?如果有人无意间看到我的困惑,指点下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值