テーブルをバッチで更新する必要があります。まず、データセット内のレコードを選択して処理し、データセットから構築された 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 の値が間違っているだけですか?