我有2个表(1个临时表和1个主操作表)。
两个表都具有相同的结构。
对于我的解决方案,
我在程序中使用DB2Copy将10000条记录插入临时表(4秒)
从临时表中,将使用存储过程将数据移动到主表中(10秒)
但是,它会在运行存储过程时锁定主表。
我怀疑是因为BEGIN和END导致存储过程像事务一样行事。
我不希望在运行存储过程时锁定表。 (有任何建议吗?)
首选:存储过程通过记录插入记录到主表中而没有事务行为。
以下是我的代码:
CREATE PROCEDURE SP_NAME ( )
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
EXTERNAL ACTION
OLD SAVEPOINT LEVEL
MODIFIES SQL DATA
INHERIT SPECIAL REGISTERS
BEGIN
--DECLARE TEMP VARIABLES
BEGIN
DECLARE MYCURSOR CURSOR WITH RETURN TO CALLER FOR
--SELECT STAGING TABLE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET AT_END = 1;
OPEN MYCURSOR;
-- FETCH MYCURSOR INTO TEMP VARIABLES
WHILE AT_END = 0 DO
-- INSERT MAIN TABLE
-- FETCH MYCURSOR INTO TEMP VARIABLES
END WHILE;
CLOSE MYCURSOR;
END;
END;
我的环境
关于主要操作表
答案 0 :(得分:1)
创建程序时,请确保您的承诺控制设置为*无(a.k.a. autocommit)。这不应该锁定你的整个表
添加示例
CREATE PROCEDURE userS.SP_TEST (
IN col_DATA Varchar(10) )
LANGUAGE SQL
SPECIFIC userS.SP_TEST
NOT DETERMINISTIC
MODIFIES SQL DATA
SET OPTION COMMIT = *NONE
BEGIN INSERT INTO userS.TABLE1 VALUES(col_DATA);
END