需求: 现在有一张表,没3秒钟需要插入一条数据,插入数据的id字段是自增长
- 创建表
-- 创建一个表
drop table TEST_TABLE;
create table TEST_TABLE(
ID NUMBER,
UPDATE_TIME DATE DEFAULT SYSDATE,
constraint pk_id primary key(id)
);
- 创建自增序列,不设置最大值
--创建自增序列 不设置最大值
DROP SEQUENCE TEST_TABLE_SEQ;
CREATE SEQUENCE TEST_TABLE_SEQ
minvalue 1 nomaxvalue
increment by 1
start with 1
nocycle nocache;
- 创建触发器
--创建触发器
DROP TRIGGER TEST_TABLE_TRI;
CREATE TRIGGER TEST_TABLE_TRI --触发器创建并命名
BEFORE INSERT ON TEST_TABLE --触发条件:往TEST_TABLE表里加入数据之前
for each row
BEGIN --触发器启动
SELECT TEST_TABLE_SEQ.nextval INTO :NEW.ID FROM DUAL;--设置触发器的主要执行体
END;
- 创建存储过程,用于执行插入语句
-- 创建存储过程
create or replace procedure job_proc is
begin
insert into TEST_TABLE(ID) VALUES(NULL);
end;
- 创建job
-- 创建job 3秒执行一次
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'sysdate+3/(24*60*60)');
end
commit;
- 观察表的状态
SELECT * FROM TEST_TABLE ORDER BY update_time;
- 观察job表
-- 查看job表 BROKEN 为N打开定时器,为Y关闭定时器
select job,broken,what,interval,t.* from user_jobs t;
- 停止job
--停止定时器,需点击提交
-- 停止定时器 参数:job值
begin
dbms_job.broken(26,true);
end;
- 启动job
-- 启动定时器
begin
dbms_job.run(26);
end;
- 删除定时器
--删除定时器
declare
jobno number;
begin
dbms_job.remove(26); -- 任务id
commit;
end;
定时器参考博客: 魔战