我必须分批更新表格。我首先选择 dataset 中的记录,处理它们并将从 dataset 构造的 xml 发送到存储的 proc。我有一个以 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 的错误值?..在同一个表中存在插入的情况下,ROWCOUNT 是获取合并查询更新的行数的最安全方法吗?