Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DB2合并和同时插入表对行数的影响_Sql_Stored Procedures_Db2 - Fatal编程技术网

Sql DB2合并和同时插入表对行数的影响

Sql DB2合并和同时插入表对行数的影响,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,我必须分批更新表格。我首先选择dataset中的记录,处理它们,并将从dataset构造的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 XMLTAB

我必须分批更新表格。我首先选择dataset中的记录,处理它们,并将从dataset构造的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来更新旧记录和新插入的记录。
问题是行支持的值不正确。假设我已经发送了10条xml记录进行更新,行支持值将小于10。为什么ROWCOUNT变量没有给我正确的计数?我的存储过程是在连续插入的情况下无法更新记录,还是ROWCOUNT的值为false?。ROWCOUNT是在同一个表中存在插入的情况下获取合并查询更新的行数的最安全方法吗

我假设ROWCOUNT很可能是更新的总行数,请检查相关文档-我的版本没有合并,并且存在一些“匹配”行,其中t.ACOL 0因此未更新行。匹配时不可能失败。我正在从T.ACOL=0的表中选择记录。我正在应用程序中处理它们,并再次发送它们进行更新。问题是,当我在第一步中选择的行最近插入到表中时,ROWCOUNT为合并查询提供了不正确的值。