【发布时间】:2020-10-04 04:27:09
【问题描述】:
我正在使用此处显示的存储过程通过参数化表名、提交计数和 where 条件来删除 12 个大表。我已将这 3 条信息插入到一个名为 PURGE_DEL 的表中,该表有 12 行,我想要一些建议,如何通过一个接一个地读取表来自动从 12 个表中删除。
有点像
表名:PURGE_DEL
CALL DELETE_DATA(PURGE_DEL.TABLE_NAME, PURGE_DEL.COMMIT_COUNT, PURGE_DEL.WHERE)
代码:
CREATE PROCEDURE DELETE_DATA
(IN V_TABLE_NAME VARCHAR(24),
IN V_COMMIT_COUNT INTEGER,
IN V_WHERE_CONDITION VARCHAR(1024))
DYNAMIC RESULT SETS 01
COMMIT ON RETURN NO
LANGUAGE SQL
NOT DETERMINISTIC
L3 : BEGIN
-- DECLARE STATEMENTS
DECLARE SQLCODE INTEGER;
DECLARE V_DELETE_QUERY VARCHAR(1024);
DECLARE V_DELETE_STATEMENT STATEMENT;
SET V_DELETE_QUERY = 'DELETE FROM ' || V_TABLE_NAME ||
' WHERE COLUMN IN (SELECT COLUMN FROM '
|| V_TABLE_NAME || 'WHERE COLUMN_ID ='
|| V_WHERE_CONDITION || ' FETCH FIRST '
|| RTRIM(CHAR(V_COMMIT_COUNT)) || ' ROWS ONLY) ';
PREPARE V_DELETE_STATEMENT FROM V_DELETE_QUERY;
DEL_LOOP:
LOOP
EXECUTE V_DELETE_STATEMENT;
IF SQLCODE = 100 THEN
LEAVE DEL_LOOP;
END IF;
COMMIT;
END LOOP;
COMMIT;
END L3
还请对存储过程提出任何更改建议。
【问题讨论】:
-
您已经在之前的帖子中获得了解决方案。这很难适应
FOR循环在其中调用您的例程吗?
标签: sql stored-procedures db2 db2-luw