我的查询时这样的,查询结果要放在游标里,下面会插入其他的表 
CURSOR curBzj IS
    SELECT a.hac010,a.hac013
      FROM v_hc02 a
     WHERE a.hac010 = pxgz
       AND a.hac013 = jqgz
       AND a.hac008 = bmfs
       AND a.hac016 >=to_date(starttime,'YYYY-MM-DD')
       AND a.hac016 <=to_date(starttime,'YYYY-MM-DD')
     GROUP BY a.hac010,a.hac013;其中where 里的查询条件根据值bmfs、jqgz是否为空而判断加还是不加,谁帮我看看怎么写,谢谢。 

解决方案 »

  1.   

    CURSOR curBzj IS
    SELECT a.hac010,a.hac013
    FROM v_hc02 a
    WHERE a.hac010 = pxgz
    AND a.hac013 = nvl(jqgz,a.hac013)   -- 如果为null 则让=左右两边恒等
    AND a.hac008 = nvl(bmfs,a.hac008)    -- 同上
    AND a.hac016 >=to_date(starttime,'YYYY-MM-DD')
    AND a.hac016 <=to_date(starttime,'YYYY-MM-DD')
    GROUP BY a.hac010,a.hac013;
      

  2.   

    楼上的是个好方法  我一直想着拼接sql语句上面去了
    bmfs、jqgz为传递进来的参数
    p_bmfs varchar2
    p_jqgz varchar2
    变量申明一下:
    v_sql varchar2(32000)
    v_filter varchar2(4000)然后:
    v_filter:='WHERE a.hac010 = pxgz
           AND a.hac016 >=to_date(starttime,'YYYY-MM-DD')
           AND a.hac016 <=to_date(starttime,'YYYY-MM-DD') ';if p_bmfs is not null then 
    v_filter:=v_filter||' and a.hac008='||p_bmfs;
    end if;if p_jqgz is not null then
    v_filter:=v_filter||' and a.hac013= '||p_jqgz;
    end if;像这样的通过拼接sql达到你要的效果 
      

  3.   

    可以使用sys_refcursor动态游标
    根据条件拼sql语句