PL/SQL存储过程,定时任务的使用教程

-步骤:

  1. 建表
  2. 创建自增seq序列
  3. 创建一个简单的插入数据存储
  4. 创建dbms_job.submit()定时任务
  5. 定时任务移除

第一步:建表(简单的测试表就好)

--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;

在这边也可以看到这个定时任务的系统分配额编号
定时任务的编号查看

windows系统postgresql日志乱码 plsql查看日志_数据库


这边也可以看到编号

windows系统postgresql日志乱码 plsql查看日志_字段_02


接下来我们看一下效果

select * from person_20201011;

windows系统postgresql日志乱码 plsql查看日志_字符串_03

第五步:定时任务移除

--删除dbms_job定时任务,其中remove括号中的数据是系统分配给定时任务的编号,具体查看看第四步的操作
begin
  dbms_job.remove(32);
end;

这时我们的定时任务就移除了

就到这里了