日期:2014-05-17  浏览次数:20976 次

关于查询的时候动态条件的问题
我的查询时这样的,查询结果要放在游标里,下面会插入其他的表 
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是否为空而判断加还是不加,谁帮我看看怎么写,谢谢。

------解决方案--------------------
楼上的是个好方法。。。 我一直想着拼接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达到你要的效果