--创建一张表g_test
create table G_TEST
(
ID NUMBER(12),
C_DATE DATE
)
--创建一个sequence
create sequence G_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 141
increment by 1
cache 20;
---创建一个存储过程
create or replace procedure prc_g_test is
begin
insert into g_test values(g_seq.nextval,sysdate);
end prc_g_test;
----发布JOB
DECLARE
jobNo NUMBER;
BEGIN
DBMS_JOB.SUBMIT(job => jobNo,
what => 'JOB_PACKAGE.JOB_Name;', --将被执行的PL/SQL代码块
next_date => trunc(sysdate)+ 1/48, --何时将运行这个工作
interval => 'trunc(sysdate +1) + 1/48'); --何时这个工作将被重执行
--no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
commit;
END;
/
----修改JOB执行时间
DECLARE
CURSOR C_JOB IS
SELECT JOB FROM USER_JOBS WHERE UPPER(WHAT) LIKE '%JOB_Name%';
C_ROW C_JOB%ROWTYPE;
BEGIN
OPEN C_JOB;
LOOP
--提取job号到c_row
FETCH C_JOB
INTO C_ROW;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
EXIT WHEN C_JOB%NOTFOUND;
DBMS_JOB.CHANGE(C_ROW.JOB,
NULL,
TRUNC(SYSDATE) + 6 / 24,
'trunc(SYSDATE+1)+6/24');
END LOOP;
--关闭游标
CLOSE C_JOB;
COMMIT;
END;
/
--------------======================
--查看创建的job
--1、相关视图 dba_jobs 、all_jobs 、user_jobs 、dba_jobs_running 包含正在运行job相关信息
select * from dba_jobs
--运行JOB 先查询出jobId
begin
dbms_job.run(:job);
end;
/
----删除JOB
begin
dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198
end;
/