Orale利用定时任务执行存储过程函数,实现定时创建表结构
今天我们要根据某个表,按月份生成 表名_20200301的格式,比如下图的T_CAL_COURT_DAILY,
我要根据每个月份生成月份表,T_CAL_COURT_DAILY_202001,T_CAL_COURT_DAILY_202002
这样的
1.先写存储过程
CREATE OR REPLACE
procedure TEST
Authid Current_User
as
tabname varchar(200);
begin
select 'T_CAL_COURT_DAILY_' || to_char(sysdate, 'yyyymmddhh24mi') into tabname from
dual; //T_CAL_COURT_DAILY为表名,要生成T_CAL_COURT_DAILY_20101010的格式,这一句的作用是生成表名
//并把表名赋值到上面的变量tabname中
execute immediate 'create table ' || tabname ||'tablespace CDB_MDMS as select
* from T_CAL_COURT_DAILY where 1 != 1';//执行创建表名的语句,||相当于JAVA中的+,连接两个字符串
* //where 1!=1可以使select语句只查询出字段名,不查数据,T_CAL_COURT_DAILY为表名
* //CDB_MDMS 是空间名
commit;
end;
2.创建定时任务
declare
job_test number; //job_test 为定时任务名称
begin
sys.dbms_job.submit(job_test, 'test;', sysdate,'sysdate+1/1440');//test为存储过程函数名称
//sysdate,'sysdate+1/1440'表示每分钟执行一次,sys.dbms_job是系统中的存储定时任务的空间结构,可以不用管
end;
执行完上面的代码,已经生成了定时任务,并且每次执行定时任务都会去调用存储过程的函数,
可以执行下面的代码看一下定时任务是否执行成功
SELECT * FROM dba_jobs; //可以查询所有定时任务
删除定时任务
begin dbms_job.remove(23); commit;end; //23位定时任务id,在上一条命令中可以查出来
我用的navicat,执行完创建定时任务的代码后函数里会多一个函数TEST,可以先点击右键,有个函数测试,可以先测试一下函数是否能执行成功再创建定时任务