我创建了一个 PLSQL 过程,下面是该过程的简短代码片段。在下面,如果我将金额发送为空,那么我想将表中的金额列更新为空,但我在此处添加了 NVL,因为在调用此过程时参数是可选传递的。我如何拥有 NVL,并且如果用户在参数中传递 null,那么我想将该列更新为 null?请帮忙
DECLARE
V_BATCH_NUMBER VARCHAR2(100) := '2024-3';
V_AMOUNT VARCHAR2(500) := null;
V_NAME VARCHAR2(500);
V_REGION_NAME VARCHAR2(100) := 'New York';
BEGIN
UPDATE BATCH_DETAILS_TAB
SET
TOTAL_AMOUNT = NVL(
V_AMOUNT,
TOTAL_AMOUNT
),
NAME = NVL(
V_NAME,
NAME
),
REGION_NAME = NVL(
V_REGION_NAME,
REGION_NAME
)
WHERE
BATCH_NUMBER = V_BATCH_NUMBER;
COMMIT;
END;
这里 V_AMOUNT 为空,我想将total_amount 列更新为空,但这里它并没有覆盖。
如果我将金额发送为空,那么我想将表中的金额列更新为空,
好的;这意味着您传递给 V_AMOUNT
的
whatever应该以
TOTAL_AMOUNT
列结束
但我在这里添加了 NVL,因为调用此过程时参数是可选传递的
这和你之前说的正好相反。
NVL
函数将检查其第一个参数的值。如果是NULL
,则NVL
将返回第二个参数的值。就您而言,这意味着 TOTAL_AMOUNT
将保持以前的状态(即什么都不会改变)。
因此,您只需要
UPDATE BATCH_DETAILS_TAB SET TOTAL_AMOUNT = V_AMOUNT ...