Oracle 用 Function 设定JOB时间
2012-07-27 10:41
197 查看
create or replace function fn_get_myjob_interval return date is
Result date;
v_nextdate date;
v_nexthours number;
begin
if to_number(to_char(sysdate, 'dd')) >= 25 then
begin
select max(t.activation_date)
into v_nextdate
from emesp.tp_production_arrange_kt t
where t.activation_flag = 0; /*獲取指派最大的時間*/
exception
when no_data_found then
v_nextdate := sysdate + 1; /*如果沒有隔天檢測*/
end;
if v_nextdate is null then
v_nextdate := sysdate;
v_nexthours := to_number(to_char(v_nextdate, 'hh24')) + 1;
else
if v_nextdate <= sysdate then
/*判斷獲取時間是否小於當前時間*/
update emesp.tp_production_arrange_kt t
set t.activation_date = sysdate + 60 / 1440
where t.activation_flag = 0
and t.activation_date = v_nextdate;
v_nextdate := sysdate + 60 / 1440;
v_nexthours := to_number(to_char(v_nextdate, 'hh24')) + 1;
commit;
else
v_nexthours := to_number(to_char(v_nextdate, 'hh24'));
end if;
end if;
else
v_nextdate := to_date(to_char(sysdate, 'yyyymm') || '2008',
'yyyymmddhh24');
v_nexthours := to_number(to_char(v_nextdate, 'hh24'));
/*設定每個月20號以後才啟動JOB*/
end if;
result := trunc(v_nextdate) + (v_nexthours * 60) / 1440;
/*轉化JOB可用時間*/
return(Result);
end fn_get_myjob_interval;
Result date;
v_nextdate date;
v_nexthours number;
begin
if to_number(to_char(sysdate, 'dd')) >= 25 then
begin
select max(t.activation_date)
into v_nextdate
from emesp.tp_production_arrange_kt t
where t.activation_flag = 0; /*獲取指派最大的時間*/
exception
when no_data_found then
v_nextdate := sysdate + 1; /*如果沒有隔天檢測*/
end;
if v_nextdate is null then
v_nextdate := sysdate;
v_nexthours := to_number(to_char(v_nextdate, 'hh24')) + 1;
else
if v_nextdate <= sysdate then
/*判斷獲取時間是否小於當前時間*/
update emesp.tp_production_arrange_kt t
set t.activation_date = sysdate + 60 / 1440
where t.activation_flag = 0
and t.activation_date = v_nextdate;
v_nextdate := sysdate + 60 / 1440;
v_nexthours := to_number(to_char(v_nextdate, 'hh24')) + 1;
commit;
else
v_nexthours := to_number(to_char(v_nextdate, 'hh24'));
end if;
end if;
else
v_nextdate := to_date(to_char(sysdate, 'yyyymm') || '2008',
'yyyymmddhh24');
v_nexthours := to_number(to_char(v_nextdate, 'hh24'));
/*設定每個月20號以後才啟動JOB*/
end if;
result := trunc(v_nextdate) + (v_nexthours * 60) / 1440;
/*轉化JOB可用時間*/
return(Result);
end fn_get_myjob_interval;
相关文章推荐
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定(转)
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定(转)
- Oracle Job 语法和时间间隔的设定
- Oracle的JOB在设定完next_date和interval之后,是什么时候决定下一次运行时间的
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle Job 语法和时间间隔的设定
- Oracle JOB 间隔时间详解
- oracle设定用户密码使用时间
- oracle设定用户密码使用时间
- oracle-crontab与oracle job在执行时间上的差异
- oracle JOB常见的执行时间
- [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
- 动态修改oracle job 让job在指定时间执行