2016-05-04 20 views
1

ストアドプロシージャを使用してテーブルの値を動的に更新しようとしています。私のストアドプロシージャは次のようになります。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の値だけを渡そうとすると、値が更新されません。 3つの値をすべて渡すと、正しく更新されています。私は2つの値を渡しても更新する必要があります。引数にDEFAULT NULLを与えようとしました。フィールドはNOT NULLと宣言されているため、動作していませんでした。誰かがこれを克服するのに役立つだろうか?ストアドプロシージャは、単一の値を渡しても機能するはずです。前もって感謝します。

答えて

3

あなたはCOALESCEを使用することができます。

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

NAME1は、元NAMEが保持されますNULLです。

+1

ありがとうございます。それは正常に動作しています。 – mani

0

IFまたは他のステートメントで、すべての引数にNULL以外の値があるかどうかを確認し、1つまたは2つの列の値を設定するUPDATEステートメントに切り替えることができます。

+1

私は渡される約20の引数を持っています。今私は3つのパラメータでテストしています。 – mani

+0

それから、 'COALESCE'を使って提案された解決策が良いです。 –

関連する問題