视图的疑惑 之 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

终于可以了。

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

你可能感兴趣的:(oracle,sql,C++,c,C#)