我使用的是oracle9i的数据库,进行多表查询时,我选择一个表作为主表,想把主表中的某些字段与其他表进行连接,就算外部的表中没有某项数据,主表中的数据也能显示出来,不过那个字段显示为空就是了。
sql语句如下:
select 
zmzd.zmdm,zmzd.zmdbm,zmzd.czxz,zmzd.zmflag,zmzd.zmqc,zmzd.zmpym,
zmzd.ssljdm,ljzd.ljjc,zmzd.ssfjdm,fjzd.fjjc,zmzd.ssyybdm,yybzd.yybmc,
zmzd.ssfgsdm,fgszd.fgsjc,zmzd.czzk,zmzd.xlxz,zmzd.szss,zmzd.ccflag,
zmzd.qzflag,zmzd.jzxjb,zmzd.tlxm,zmzd.gxdate,zmzd.xgflag from zmzd,ljzd,fjzd,yybzd,fgszd where zmzd.ssljdm=ljzd.ljdm(+) and zmzd.ssfjdm=fjzd.fjdm(+) 
and zmzd.ssyybdm=yybzd.yybdm(+) and zmzd.ssfgsdm=fgszd.fgsdm(+)前一段时间这句sql还能运行,但是今天突然就不行了,如果删掉最后一个(+),就能查询出数据,问题是不是跟fgszd表有关系?有哪些情况会造成这种问题?
万分感谢!!!

解决方案 »

  1.   

    我是在PL/SQL中测试的,executing等10+秒之后,就提示"ORA-03113通信通道的文件结束","ORA-03114未连接到ORACLE",应该是超时了,oracle断开了.我试过,去掉zmzd.ssfgsdm=fgszd.fgsdm(+)后面的(+)就可以了,查询出的数据也是我需要的。估计问题出在fgszd表,我不知道这种连接的写法是不是对其他表中数据有什么要求。
      

  2.   

    sql*plus里面
    try:variable v_cur refcursor;
    begin
    open :v_cur for
    select    
    zmzd.zmdm,zmzd.zmdbm,zmzd.czxz,zmzd.zmflag,zmzd.zmqc,zmzd.zmpym,  
    zmzd.ssljdm,ljzd.ljjc,zmzd.ssfjdm,fjzd.fjjc,zmzd.ssyybdm,yybzd.yybmc,zmzd.ssfgsdm,fgszd.fgsjc,zmzd.czzk,zmzd.xlxz,zmzd.szss,zmzd.ccflag, zmzd.qzflag,zmzd.jzxjb,zmzd.tlxm,zmzd.gxdate,zmzd.xgflag    
    from  zmzd,ljzd,fjzd,yybzd,fgszd    
    where  zmzd.ssljdm=ljzd.ljdm(+)  and  zmzd.ssfjdm=fjzd.fjdm(+)    
    and  zmzd.ssyybdm=yybzd.yybdm(+)  and  zmzd.ssfgsdm=fgszd.fgsdm(+);
    end;
    /
    print v_cur;  
     
      

  3.   

    这个应该是sql*plus的问题
    很奇怪,这里面的原因我也不清楚
    同样的语句,放在pl/sql块里面就没有问题了。
      

  4.   

    是否跟数据库有关,而不是与sql有关?