为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM7
【操作系统】:凝思80
【CPU】:X86
【问题描述】*:如何自动定期删除7天前的历史数据,表名都是YC开头的,一万多张。表的数量还会随着时间增加,表中的数据也会随着时间增加
可以通过存储过程,配合作业代理实现:
1.获取“你的模式”下的所有历史表
2.删除表中7天前的数据
3.定时执行
CREATE OR REPLACE PROCEDURE delete_old_data_in_hisdb()
AS
DECLARE
v_table_name VARCHAR(128);
v_sql VARCHAR(4000);
BEGIN
-- 遍历你的模式下的所有表,假如模式名叫hisdb
FOR rec IN (SELECT table_name FROM all_tables WHERE owner = 'hisdb' and table_name like 'YC%') LOOP
v_table_name := rec.table_name;
-- 假设所有相关的表都有一个date_time列,并且该列是DATE或TIMESTAMP类型
-- 构造并执行删除旧数据的SQL
v_sql := 'DELETE FROM hisdb.' || v_table_name ||
' WHERE date_time >= trunc(sysdate-8,''dd'') and date_time<trunc(sysdate-7,''dd'') ';
-- 执行动态SQL
EXECUTE IMMEDIATE v_sql;
-- 输出或记录日志(可选)
--DBMS_OUTPUT.PUT_LINE('Deleted old data from ' || v_table_name);
END LOOP;
END;
/
--调用存储过程,手动验证
CALL delete_old_data_in_hisdb();
--每天凌晨3点执行作业,调用存储过程
call SP_CREATE_JOB('delete_old_data_in_hisdb',1,0,'',0,0,'',0,'删除历史数据');
call SP_JOB_CONFIG_START('delete_old_data_in_hisdb');
call SP_ADD_JOB_STEP('delete_old_data_in_hisdb', 'B3', 0, 'CALL delete_old_data_in_hisdb();', 0, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delete_old_data_in_hisdb', 'D3', 1, 1, 1, 0, 0, '03:00:00', NULL, '2024-11-24 18:00:20', NULL, '');
call SP_JOB_CONFIG_COMMIT('delete_old_data_in_hisdb');
创建一个存储过程,CREATE OR REPLACE PROCEDURE test_t AS
BEGIN
DELETE FROM test WHERE test_column < SYSDATE - INTERVAL '7' DAY;
COMMIT;
END;
然后使用达梦管理工具创建定时任务