在db2表中动态更新值的存储过程

时间:2016-05-04 07:39:54

标签: stored-procedures dynamic db2

我正在尝试使用存储过程动态更新表的值。我的存储过程如下,

CREATE OR REPLACE PROCEDURE Update
    (
     IN ID1 BIGINT,
     IN SOURCE1 VARCHAR(100),
     IN NAME1 VARCHAR(100)
     ) 
DYNAMIC RESULT SETS 2
LANGUAGE SQL
BEGIN
    UPDATE MessageTable
    SET SOURCE=SOURCE1,
    NAME=NAME1
    WHERE ID=ID1;     
END

当我尝试单独传递ID1和SOURCE1的值时,值不会更新。当我传递所有这三个值时,它们会得到正确的更新。我的要求是,即使我传递了两个值,它应该更新。我尝试为参数提供DEFAULT NULL。由于字段被声明为NOT NULL,因此无效。有人可以帮助克服这一点。即使我传递单个值,存储过程也应该有效。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用COALESCE

UPDATE MessageTable
SET SOURCE = COALESCE(SOURCE1, SOURCE),
    NAME   = COALESCE(NAME1, NAME)
WHERE ID = ID1;  

NAME1NULL时,原始NAME将被保留。

答案 1 :(得分:0)

您可以使用IF或其他语句检查所有参数是否都具有非NULL值,然后切换到设置一个或两个列值的UPDATE语句。