事情是这样的,有一个查询:WITH TB_AllGroup AS (SELECT  * FROM  (    SELECT A.GROUPID,A.GROUPNAME,NVL(B.PGROUPID,0) AS PGROUPID FROM SYSBASE_GROUP A     LEFT JOIN SYSBASE_GROUP_RELATION B     ON A.GROUPID = B.SGROUPID WHERE A.FLAG != 3   ) TA  START WITH TA.GROUPID =64 CONNECT BY PRIOR TA.GROUPID = TA.PGROUPID)   SELECT GROUPID as VGROUP_ID,0 AS Type FROM TB_AllGroup UNION ALL SELECT GROUPID as VGROUP_ID,1 AS Type FROM TB_AllGroup;
里面一个递归表和一个信息表,就这个语句,在plsql里面执行了是OK的10条数据,因为union all了相同的数据。但是在C#的程序访问却只有6行,很奇怪。因此我将语句拷贝到sqlplus执行,更神奇的事发生,我将拷贝的语句贴进去加分号按回车后,只返回6行,然后再拷贝进去,按回车,然后加分号,再按回车,出现结果10行,两条的语句一模一样的,为什么会出现这个情况?
附录我的执行的图:
然后我冒险重启了下,重启完了之后两种方法执行的都是返回10条,然后过一阵子,又出现上种情况,实在找不出分析的法子为啥会这样?查看了执行计划几乎都一样,就统计信息有点不一样。求支招。帮忙分析或者给下思路

解决方案 »

  1.   

    恐怕是个bug,而且和树形查询有关
    你再改写下,把TA里的查询移出来,写成with ta as(.............),tb_allgroup as(....
    试试
      

  2.   

    可以确认的是数据库里的数据是没有变化的,而且,重启了下服务器就好了,在其他的服务器是不会出现这个情况。Oracle 10g的32位的,是不是服务器少了什么配置之类的?
      

  3.   

    其他的类似的查询也会出现这个问题,相同的语句多了一个回车就这样,哦,是递归的with会这样