合并报表示例如下
MERGE INTO table_to_upsert AS tab
USING (SELECT * FROM B
) merge
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
有什么方法可以在循环中运行合并语句,并对每6000条记录进行提交。
试图实现上面的sql,而不是一次提交所有的行,有什么办法提交每6000行...... ?
你可以使用复合sql来组织一个循环,循环的对象是 B
记录。
--#SET TERMINATOR @
BEGIN
DECLARE L_COMMIT_SIZE INT DEFAULT 6000;
DECLARE L_COMMIT_CNTR INT DEFAULT 0;
FOR V AS CUR CURSOR WITH HOLD FOR SELECT key_to_match, c1 FROM B
DO
MERGE INTO table_to_upsert t
USING TABLE(VALUES (V.key_to_match, V.c1)) m (key_to_match, c1)
ON t.key_to_match = m.key_to_match
WHEN MATCHED THEN UPDATE SET C1 = m.C1
WHEN NOT MATCHED THEN INSERT (key_to_match, C1) VALUES (V.key_to_match, V.c1);
SET L_COMMIT_CNTR = L_COMMIT_CNTR + 1;
IF L_COMMIT_SIZE = L_COMMIT_CNTR THEN
COMMIT;
SET L_COMMIT_CNTR = 0;
END IF;
END FOR;
COMMIT;
END
@