--1 、建立一个存储过程,转历史并删除,假设表名名:test,历史表:test_his(两表结构一样):如 CREATE OR REPLACE PROCEDURE delhisdata AS BEGIN INSERT INTO test_his SELECT * FROM test WHERE ins_date < trunc(add_months(SYSDATE, -12)); DELETE FROM test t WHERE ins_date < trunc(add_months(SYSDATE, -12)); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END; / --1、数据库中建立一个JOB对存储过程进行调用,并且每月执行一次, DECLARE jobno NUMBER; BEGIN DBMS_JOB.SUBMIT(JOB => jobno, /*自动生成JOB_ID*/ WHAT => 'delhisdata;', /*需要执行的过程或SQL语句*/ NEXT_DATE => TRUNC(SYSDATE + 1) + 2 / 24, /*初次执行时间*/ INTERVAL => 'TRUNC(add_months(SYSDATE,1))+2/24'); /*执行周期*/ COMMIT; END; /
CREATE OR REPLACE PROCEDURE delhisdata AS
BEGIN
INSERT INTO test_his
SELECT * FROM test WHERE ins_date < trunc(add_months(SYSDATE, -12));
DELETE FROM test t WHERE ins_date < trunc(add_months(SYSDATE, -12));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
/
--1、数据库中建立一个JOB对存储过程进行调用,并且每月执行一次,
DECLARE
jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT(JOB => jobno, /*自动生成JOB_ID*/
WHAT => 'delhisdata;', /*需要执行的过程或SQL语句*/
NEXT_DATE => TRUNC(SYSDATE + 1) + 2 / 24, /*初次执行时间*/
INTERVAL => 'TRUNC(add_months(SYSDATE,1))+2/24'); /*执行周期*/
COMMIT;
END;
/
写个存储过程, 然后用该存储过程制定JOB。 定期执行就可以了。 具体存储过程和JOB语法,google 有很多。
2.定个JOB定制执行该存储过程
job详解
job定时: