Rất tiếc, mã của bạn trông phức tạp quá. Hãy xem xét sự đơn giản hóa này trước:
CREATE OR REPLACE PROCEDURE Archive
IS
v_query varchar2(2048);
BEGIN
FOR REC IN (select tablename,columnname condition from pseb.purge_tables)
LOOP
if(rec.tablename ='cfw.DCTBLPERFCUMULATIVEMASTER') then
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB3MAINREG where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB4TODENERG where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERDFCUMULATIVEB5MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB6TODREG where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB7MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB8MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
else
v_query:='delete FROM '|| rec.tablename || ' WHERE ' || rec.condition||' < sysdate-90';
execute immediate v_query;
end if;
END LOOP;
END; --Procedure
Định nghĩa công việc thay thế theo dbms_job.submit:
declare
jid number;
begin
dbms_job.submit(
JOB => jid,
WHAT => 'pseb.archive;',
NEXT_DATE => SYSDATE,
INTERVAL => 'sysdate +2');
end;
/
commit; -- <<--added commit here
Một cách để kiểm tra công việc:
select * from user_jobs;