给你一个我自己写的完整的(用PLSQL->文件->新建->测试窗口)
DECLARE
jobno BINARY_INTEGER;
instno number;
p_job_queue_processes VARCHAR2(512);
p_interval VARCHAR2(200);
p_next_date DATE;
s_next_date VARCHAR2(50);
begin
select instance_number into instno from v$instance;
-- jobno := 1512; 手工指定jobno
p_interval := 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)'; -- 间隔
p_next_date := TO_DATE('20080910 13:45:00','RRRRMMDD HH24:MI:SS');--trunc(sysdate,'HH24') + 1/4/24; -- 下次执行时间,date类型
s_next_date := to_char(p_next_date,'RRRR-MM-DD HH24:MI:SS'); -- 下次执行时间,字符串类型
/ -- 创建新job
dbms_jobsubmit(jobno
, 'statspacksnap(7);'
, p_next_date -- trunc(sysdate,'HH24') + 1/24
, p_interval -- 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)';
, TRUE, instno);
/
dbms_jobchange(jobno, '要执行的程序名称;' -- 比如statspacksnap; -- 收集统计信息
, p_next_date
, p_interval
);--, TRUE, instno);
-- dbms_jobremove(jobno); --jobno -- 移除job
-- commit;
end;
--- 完成后,可以用select from dba_jobs dj where djjobno=xxx 检查状态
当然是用schedule更好, schedule的功能强大的多, 你如果是第一次用这个, 建议装个pl/sql developer, 在这里面新建schedule, 会让你很快上手, 一开始就直接写语句, 容易让人发晕, 而且pl/sql developer里面新建, 修改, 删除等 *** 作都可以看到对应的语句, 这样学习起来效果很好
等基本玩熟之后, 再云找些理论知识来看, 这样就OK了
把job放到一个线程中,用一个成员变量控制线程的运行
public class MyThead implements Runnable{
private boolean flag = false;
public void run() {
//while(){ 反复执行的程序
if(flag) //flag是开关,更改flag状态控制线程是否运行
return;
// }
}
1 首先确定要停止的JOB号
SQL>select sid from dba_jobs_running;
2查找到正在运行的JOB的spid:
SQL>select aspid from v$process a ,v$session b where aaddr=bpaddr and bsid in (select sid from dba_jobs_running);
3 Broken确认的JOB
SQL> EXEC DBMS_JOBBROKEN(job#,TRUE);
注意:当执行完该命令选择的这个JOB还是在运行着的。
4 Kill 对应的job。
SQL>ALTER SYSTEM KILL SESSION 'sid,serial#';
dbms_jobsubmit(:job1,'MYPROC;',sysdate,'sysdate+5/1440');--每天1440分钟,即一分钟运行test过程一次,分子为5则为每分钟执行一次
具体可以参考我的百度云笔记:
>
以上就是关于关于PLSQL中JOB定时任务的问题全部的内容,包括:关于PLSQL中JOB定时任务的问题、oracle里的job和schedule有什么区别,优先考虑哪一个、用java代码 道怎样停止一个运行的job,我发现没法停掉它.只能把整个进程退出才行.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)