I am trying to Delete records from a tables with huge volume of records.
Now the error is
'Cursor C1 identifies a prepared statement that is not a SELECT or VALUES'
1-Added COMMIT,Without using COMMIT the 'Transaction Logs' are getting Full. 2-Added WITH HOLD statement for Cursor to remain active.
Lines with '--NEW ADDED' shows the new added code to a already working delete without COMMIT and 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
Please let me know how to delete using COMMIT and WITH HOLD