业务逻辑
- 业务上A表需要一直提供服务,所以在存储过程中将数据写入A-backup表,然后通过rename操作,将A-backup表转为A表提供数据;
编写存储过程
CREATE OR REPLACE PROCEDURE P_CS_ETL_DATA AS
pro_date VARCHAR(32);
BEGIN
select to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS') into pro_date from dual; -- 获取执行时间
insert into A-backup表
select xx from source_table;
COMMIT;
EXECUTE IMMEDIATE 'RENAME A表 to A-temp表';
EXECUTE IMMEDIATE 'RENAME A-backup表 to A表';
EXECUTE IMMEDIATE 'RENAME A-temp表 to A-backup表';
EXECUTE IMMEDIATE 'TRUNCATE TABLE A-backup表';
end;
编写定时任务
DECLARE
job NUMBER;
BEGIN
sys.dbms_job.submit(job => job,
what => 'P_CS_ETL_DATA;',
next_date => sysdate + 1/(24*60/2),
INTERVAL => 'TRUNC(sysdate, ''mi'') + 1/(24*60/2)'); --每两分钟执行一次
COMMIT;
END;
-- 然后就能够在user_jobs表中查询到存储过程P_CS_ETL_DATA被调度的情况了;
select * from user_jobs where what = 'P_CS_ETL_DATA;';
版权声明:本文为stillcoolman原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。