oracle - procedimientos - procedimiento oráculo con caja depende del parámetro
procedimientos y funciones oracle pl/sql (1)
Hola, quiero hacer un procedimiento como el siguiente:
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)
Quiero agregar un filtro extra que depende del parámetro:
CASE WHEN vgroupid > -1 then
AND GROUPID = vgroupid
ELSE
NULL
END
...
así que la causa causa como
WHERE PROCESSID = FN_PPROCESSPREVIOUS
AND (UNCOLLECTED > 0 OR INVOICE = 0) AND GROUPID = vgroupid
cuando vgroupid = -1, entonces necesito todos los registros y cuando vgroupid> -1, entonces solo necesito los registros en vgroupid
¿alguna idea?
CURSOR c
IS
SELECT COMPANYID,
GROUPID,
PERIODID,
FN_PPROCESSCURRENT
FROM LIQUIDATIONSDETAILS
WHERE PROCESSID = FN_PPROCESSPREVIOUS
AND (UNCOLLECTED > 0 OR INVOICE = 0)
AND (((GROUPID = vgroupid) AND (vgroupid > -1)) OR (vgroupid = -1))
por ejemplo: si vgroupid = -1
, entonces la última condición será (((GROUPID = -1) AND (-1 > -1)) OR (-1 = -1))
o ((forever_false AND forever_false) OR (forever_true))
o (-1 = -1)
- todos los registros
en cambio, si vgroupid = 123
última condición será (((GROUPID = 123) AND (123 > -1)) OR (123 = -1))
o (((GROUPID = 123) and forever_true) OR (forever_false))
o (GROUPID = 123)
- solo 123 GROUPID