如果我在参数中显式传入 PLSQL,我也想更新表中的空值

问题描述 投票:0回答:1

我创建了一个 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 列更新为空,但这里它并没有覆盖。

sql mysql plsql oracle-sqldeveloper plsql-package
1个回答
0
投票

如果我将金额发送为空,那么我想将表中的金额列更新为空,

好的;这意味着您传递给 V_AMOUNT

whatever
应该以
TOTAL_AMOUNT
列结束

但我在这里添加了 NVL,因为调用此过程时参数是可选传递的

这和你之前说的正好相反。

NVL
函数将检查其第一个参数的值。如果是
NULL
,则
NVL
将返回第二个参数的值。就您而言,这意味着
TOTAL_AMOUNT
将保持以前的状态(即什么都不会改变)。

因此,您只需要

UPDATE BATCH_DETAILS_TAB SET TOTAL_AMOUNT = V_AMOUNT ...
© www.soinside.com 2019 - 2024. All rights reserved.