【发布时间】:2017-05-17 00:29:59
【问题描述】:
我有 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;
我的环境
- 我有一个程序“A”,它试图将 10k 条记录插入主表(大量索引和大量数据),这需要 10 分钟 ++。
关于主操作表
- 读取次数多,但前端更新和插入最少。
- 在后端,另一个程序会频繁地向该表中插入记录。
- 一次只允许运行1个后端程序实例
【问题讨论】: