PL/SQL存储过程,定时任务的使用教程
-步骤:
- 建表
- 创建自增seq序列
- 创建一个简单的插入数据存储
- 创建dbms_job.submit()定时任务
- 定时任务移除
第一步:建表(简单的测试表就好)
--1.table,测试表
create table person_20201011(
id number primary key,
name varchar2(10) not null
);
第二步:序列
--2.sequence
create sequence seq_pid;
第三步:创建简单的数据插入过程procrdure
--3.procedure
create or replace procedure xperson is
begin
insert into person_20201011
values
(seq_pid.nextval, 'admin' || seq_pid.currval);
--表有两个字段,其中插入的第一个字段根据主键id序列自增,每次使用序列+1,第二个字段的值为admin连接上序列的当前值
commit;
--记得提交事务(插入更新等操作)
end;
第四步: 创建dbms_job.submit()定时任务
首先要了解一下dbms_job.submit(),以及它的参数和类型,是怎么使用的
–submit 有四个参数,
参数一:job(out模式的binary_integer类型),是用来提交定时任务时接受任务编号的(创建时候系统分配的)
参数二:varchar2,要调用的存储过程的名称;例如**‘过程名字();’**
参数三:date,第一次执行任务的时间
参数四:interval(varchar2),任务执行的时间间隔
参数四是一个字符串,但是字符串必须是date类型;例如’sysdate+1’表示隔一天运行一次
间隔时间的计算方式,参数四-参数三;
--4.dbms_job 定时任务创建 定时插入数据 (定义并提交定时任务)
declare
jid binary_integer; --声明一下系统分配的编号,这个数据类型要注意,详情请看上面的参数说明
begin
dbms_job.submit(jid,'xperson();',sysdate,'sysdate+10/(24*60*60)');
--第一个参数是系统分配的编号,
--注意参数二是存储过程的调用,后面要有括号和分号,它是一个字符串类型的
--参数三,就是开始的时间了,我这里使用了当前系统时间
--还有就是第四个参数时间的计算也是字符串类型的,我这里使用了每隔10秒跑一次定时
dbms_output.put_line('系统分配的编号:' || jid); --输出一下这个系统分配的编号,方便等会移除定时job等
dbms_job.run(jid); --运行定时任务
end;
在这边也可以看到这个定时任务的系统分配额编号
定时任务的编号查看
这边也可以看到编号
接下来我们看一下效果
select * from person_20201011;
第五步:定时任务移除
--删除dbms_job定时任务,其中remove括号中的数据是系统分配给定时任务的编号,具体查看看第四步的操作
begin
dbms_job.remove(32);
end;
这时我们的定时任务就移除了
就到这里了