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
總結
以上是生活随笔為你收集整理的oracle存储过程多条件判断,oracle存储过程条件替空的判断(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视力矫正手术的危害有哪些
- 下一篇: 鼻息肉流血怎么办