嗨,我想做一个如下的程序:
CREATE OR REPLACE PROCEDURE SOL.INSERT_LD_NEXTPROCESS (vgroupid NUMBER) IS VPERIODID VARCHAR2 (10); vPROCSESSID NUMBER; CURSOR c IS SELECT COMPANYID,GROUPID,PERIODID,FN_PPROCESSCURRENT FROM LIQUIDATIONSDETAILS WHERE PROCESSID = FN_PPROCESSPREVIOUS AND (UNCOLLECTED > 0 OR INVOICE = 0)
我想添加一个额外的过滤器,它取决于参数:
CASE WHEN vgroupid > -1 then AND GROUPID = vgroupid ELSE NULL END ...
所以原因就在哪里
WHERE PROCESSID = FN_PPROCESSPREVIOUS AND (UNCOLLECTED > 0 OR INVOICE = 0) AND GROUPID = vgroupid
当vgroupid = -1时,我需要所有记录,当vgroupid> -1然后我只需要vgroupid中的记录
任何的想法?
解决方法
CURSOR c IS SELECT COMPANYID,FN_PPROCESSCURRENT FROM LIQUIDATIONSDETAILS WHERE PROCESSID = FN_PPROCESSPREVIOUS AND (UNCOLLECTED > 0 OR INVOICE = 0) AND (((GROUPID = vgroupid) AND (vgroupid > -1)) OR (vgroupid = -1))
例如:
如果vgroupid = -1,那么最后一个条件将是(((GROUPID = -1)AND(-1> -1))OR(-1 = -1))或((forever_false AND forever_false)OR(forever_true))或(-1 = -1) – 所有记录
相反,如果vgroupid = 123,最后一个条件将是(((GROUPID = 123)AND(123> -1))或(123 = -1))或(((GROUPID = 123)和forever_true)或(forever_false))或(GROUPID = 123) – 只有123 GROUPID