Oracle 存储过程+JOB初学

2014-11-24 13:09:13 · 作者: · 浏览: 1
项目模块:调查问券

要求:每个问卷有开始时间和结束时间,有未开始(status=1)-->调研中(2)-->结束调研(3)3个状态。要求 系统自动判断是否到达了问卷的开始时间,如果当前时间>=开始时间且<结束时间,则将未开始的问卷置成调研中,如果系统时间>结束时间,则将调研中的问卷状态置为已结束。

1)SQL拼写
开始调研SQL:

1
update E_QUESTIONNAIRE_THEME t
2
set t.status = 2
3
where t.state =1 //state为1代表可用,系统使用假删除,2代表已删除
4
and sysdate>=to_date(t.begin_date,'yyyy-mm-dd')
5
and sysdate 结束SQL:

1
update E_QUESTIONNAIRE_THEME t
2
set t.status = 3
3
where t.state =1
4
and sysdate>=to_date(t.end_date,'yyyy-mm-dd') and t.status = 2;

2)存储过程

01
create or replace procedure E_CHANGE_THEME_STATUS_PROC is
02
begin
03
update E_QUESTIONNAIRE_THEME t
04
set t.status = 2
05
where t.state =1
06
and sysdate>=to_date(t.begin_date,'yyyy-mm-dd')
07
and sysdate 08
update E_QUESTIONNAIRE_THEME t
09
set t.status = 3
10
where t.state =1
11
and sysdate>=to_date(t.end_date,'yyyy-mm-dd') and t.status = 2;
12
end E_CHANGE_THEME_STATUS_PROC;

3)Job
--- windows窗体下脚本(这个我没有测试过)

1
begin
2
sys.dbms_job.submit(job => :job,
3
what => 'E_CHANGE_THEME_STATUS_PROC();',
4
next_date => to_date('28-12-2011 00:06:00', 'dd-mm-yyyy hh24:mi:ss'),
5
interval => 'trunc(sysdate)+1+0.1/24');
6
commit;
7
end;
8
/

---PL/SQL中

1
declare
2
job number;
3
begin
4
sys.dbms_job.submit(job,'E_CHANGE_THEME_STATUS_PROC();',sysdate,'sysdate+3/1440');
5
end;---测试使用的语句,经测试该语句没有问题
1
declare
2
job number;
3
begin
4
sys.dbms_job.submit(job,'E_CHANGE_THEME_STATUS_PROC();',to_date('27-12-2011 00:06:00', 'dd-mm-yyyy hh24:mi:ss'),'trunc(sysdate)+1+0.1/24');
5
end; --正式任务的语句
===============================

刚拿到任务连什么是JOB都不知道,存储过程更是觉得


是高深莫测的东东,后来查文档和开源代码完成了简易的功能,有什么错误的地方欢迎各位大侠指正

摘自 王建奎Jerrick的博客