DB2合并以及在ROWCOUNT上同时插入表的效果

时间:2012-05-30 18:01:00

标签: sql stored-procedures db2

我必须批量更新表格。我首先在数据集中选择记录,处理它们并将从数据集构造的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的错误值?在同一个表中是否存在插入时,ROWCOUNT最安全的方法是获取合并查询更新的行数?

0 个答案:

没有答案