0

テーブルをバッチで更新する必要があります。まず、データセット内のレコードを選択して処理し、データセットから構築された xml をストアド プロシージャに送信します。入力パラメーターとして xml を持つストアド プロシージャがあります。以下のようにマージクエリを使用してテーブルを更新します

CREATE PROCEDURE SP_UPDATE(IN RECORDS XML, OUT ROWSUPDATED INTEGER)
BEGIN
DECLARE RCOUNT INTEGER;
MERGE INTO TARGET_TABLE AS T
USING (SELECT X.* FROM 
XMLTABLE('$d/Root/Record' passing RECORDS as "d"
COLUMNS 
        "A" VARCHAR(10) PATH 'a',
        "B" VARCHAR(10) PATH 'b',
        "C" VARCHAR(10) PATH 'c',
        "D" VARCHAR(10) PATH 'd',
        "E" VARCHAR(10) PATH 'e',
        "F" VARCHAR(10) PATH 'f' 
) AS X) AS S
ON T.FCOL=S."F"
WHEN MATCHED AND T.ACOL=0 THEN
UPDATE
SET
T.ACOL=1,
T.BCOL=XT."B",
T.COL=XT."C"
GET DIAGNOSTICS RCOUNT=ROWCOUNT;
SET ROWSUPDATED=RCOUNT;
END

このプロシージャは、すべてのレコードが更新されるまで呼び出されます。新しいレコードは、他のアプリケーションによって同時にターゲット テーブルに挿入されます。列の値を 1 に設定して、上記のように古いレコードと新しく挿入されたレコードの両方を更新する必要があります。問題は、ROWSUPDATED 値が正しくないことです。更新のために 10 個の xml レコードを送信したとします。ROWSUPDATED 値は 10 未満になります。なぜ ROWCOUNT 変数で適切な数が得られないのでしょうか? ストアド プロシージャは、連続挿入が存在する場合にレコードを更新できませんか、それとも ROWCOUNT の値が間違っているだけですか?

4

0 に答える 0