【发布时间】:2019-06-06 14:09:16
【问题描述】:
我正在尝试从具有大量记录的表中删除记录。
现在错误是
'Cursor C1 标识一个不是 SELECT 或 价值观'
1-添加了 COMMIT,如果不使用 COMMIT,“事务日志”会变满。 2-添加了 WITH HOLD 语句以使光标保持活动状态。
带有“--NEW ADDED”的行将新添加的代码显示到已在工作的删除中,没有 COMMIT 和 WITH HOLD
CREATE PROCEDURE
TABLE1.MYPROC1 ( IN A VARCHAR(100),IN B INTEGER,IN C INTEGER)
LANGUAGE SQL
BEGIN
DECLARE SQLCODE int;
DECLARE V_CREATE_QUERY VARCHAR(1024);
DECLARE V_DELETE_STATEMENT STATEMENT;
DECLARE C1 CURSOR WITH HOLD FOR V_DELETE_STATEMENT;--NEW ADDED
SET V_CREATE_QUERY='DELETE FROM (SELECT * FROM '||a||' WHERE KEY
=='||RTRIM(CHAR(B)||' ' FETCH FIRST ' || RTRIM (CHAR(C)||' ROWS ONLY ) AS
PURGE_TABLE';
PREPARE V_DELETE_STATEMENT FROM V_CREATE_QUERY;
OPEN C1; --NEW ADDED
WHILE(SQLCODE <>1000)
DO
EXECUTE V_DELETE_STATEMENT;
COMMIT; --NEW ADDED
END WHILE;
CLOSE C1 --NEW ADDED
end
请告诉我如何使用 COMMIT 和 WITH HOLD 删除
【问题讨论】:
-
@Mark Barinstein
-
@mao stackoverflow.com/questions/16426289/… 不同,因为这是一个存储过程
-
我认为错误信息很清楚;您无法为
delete语句打开游标。 -
我得到了错误消息,但请告诉我还有什么其他方法可以纠正这个问题并让这个删除发生
标签: stored-procedures db2 commit db2-luw