要求:每个问卷有开始时间和结束时间,有未开始(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
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
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
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的博客