oracle存储过程多条件判断,oracle存储过程条件替空的判断(2)

SQL codeCREATE OR REPLACE PROCEDURE SP_QRY_CWHZ(BEGDATE DATE,ENDDATE DATE) is

begin

INSERT INTO T_QRY_CWHZB(ID,ZSL,SJ,YCZJE,KYE)

SELECT MAX(ID),COUNT(DISTINCT ZFHM),TO_CHAR(CZSJ,'YYYY-MM-DD'),SUM(NVL(CZJE,0)),SUM(NVL(CZHYE,0))

FROM T_RECHARGE

--条件用OR来连接

WHERE ZFBZ='F' AND

((BEGDATE IS NULL AND ENDDATE IS NULL)

OR

( BEGDATE IS NOT NULL AND ENDDATE IS NOT NULL AND TO_CHAR(CZSJ,'YYYY-MM-DD') >= TO_CHAR(BEGDATE,'YYYY-MM-DD') AND TO_CHAR(CZSJ,'YYYY-MM-DD') <= TO_CHAR(ENDDATE,'YYYY-MM-DD')))

GROUP BY TO_CHAR(CZSJ,'YYYY-MM-DD');

UPDATE T_QRY_CWHZB SET DF=YCZJE,ZJE=YCZJE+KYE;

end SP_QRY_CWHZ;

------解决方案--------------------

CREATE OR REPLACE PROCEDURE SP_QRY_CWHZ(BEGDATE DATE, ENDDATE DATE) IS

SQL VARCHAR2(200);

BEGIN

SQL := 'INSERT INTO T_QRY_CWHZB(ID,ZSL,SJ,YCZJE,KYE)

SELECT MAX(ID),COUNT(DISTINCT ZFHM),TO_CHAR(CZSJ,''YYYY-MM-DD''),SUM(NVL(CZJE,0)),SUM(NVL(CZHYE,0))

FROM T_RECHARGE

WHERE ZFBZ=''F''';

IF (BEGDATE IS NOT NULL AND ENDDATE IS NOT NULL) THEN

SQL := SQL || ' AND TO_CHAR(CZSJ,''YYYY-MM-DD'') >= TO_CHAR(BEGDATE,''YYYY-MM-DD'')

AND TO_CHAR(CZSJ,''YYYY-MM-DD'') <= TO_CHAR(ENDDATE,''YYYY-MM-DD'')

GROUP BY TO_CHAR(CZSJ,''YYYY-MM-DD'')';

ELSE

IF (BEGDATE IS NULL AND ENDDATE IS NOT NULL) THEN

SQL := SQL ||

' AND TO_CHAR(CZSJ,''YYYY-MM-DD'') <= TO_CHAR(ENDDATE,''YYYY-MM-DD'')';

ELSE IF (BEGDATE IS NOT NULL AND ENDDATE IS NULL) THEN

SQL:=SQL||' AND TO_CHAR(CZSJ,''YYYY-MM-DD'') >= TO_CHAR(BEGDATE,''YYYY-MM-DD'')';

ELSE

NULL;

END IF ;

execute immediate sql;

UPDATE T_QRY_CWHZB SET DF=YCZJE,ZJE=YCZJE+KYE;

commit;

end SP_QRY_CWHZ;

Ok heeeeeeeeeeeeeeeeeeeh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值