我的查询时这样的,查询结果要放在游标里,下面会插入其他的表
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是否为空而判断加还是不加,谁帮我看看怎么写,谢谢。
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是否为空而判断加还是不加,谁帮我看看怎么写,谢谢。
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;
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达到你要的效果
根据条件拼sql语句