yjailj 2010-01-05 16:44
浏览 219
已采纳

oracle job

困扰了很长一段时间了. 需要总是不太明确
开始我的建议是每个星期天凌晨1 点 跑, 领导觉得时间太短了.政府机关效低,没必要这么快,就一直搁着
[code="sql"]SET SERVEROUTPUT ON;
DECLARE
job_num BINARY_INTEGER;
proc VARCHAR2(32);
v_begin DATE;
v_interval VARCHAR2(64);
BEGIN
proc := 'opera_rake;';
v_begin := trunc(sysdate) + 23 / 24;
v_interval := 'trunc(next_day(sysdate,''星期日'')) + 1 / 24';
DBMS_JOB.SUBMIT(job_num, proc, v_begin, v_interval);
DBMS_OUTPUT.PUT_LINE('job(任务) 编号: ' || job_num);
COMMIT;
END;
/[/code]

我怕需求会再变,于是在系统的代码表中添加了一个字段.让管理员来操作
[code="sql"]DECLARE
job_num BINARY_INTEGER;
proc VARCHAR2(32);
v_begin DATE;
v_interval VARCHAR2(64);
temp NUMBER;
BEGIN
-- 如果没有设定此值,则 默认为 每周日凌晨 1 点统计
SELECT DD_VALUE INTO temp FROM DICTIONARY WHERE DD_ID = 'commission_statis';
if temp is null then
v_interval := 'trunc(next_day(sysdate,''星期日'')) + 1 / 24';
else
v_interval := 'trunc(sysdate) + ' || temp || ' + 1 / 24';
end if;
proc := 'opera_rake;';
v_begin := trunc(sysdate) + 23 / 24;
DBMS_JOB.SUBMIT(job_num, proc, v_begin, v_interval);
DBMS_OUTPUT.PUT_LINE('job(任务) 编号: ' || job_num);
COMMIT;
END;
/[/code]
当然,这样会要求数据库字典表中必须要有一条记录为 'commission_statis'. 现在抛开 动态 SQL 不谈.整个系统都成了这样.

现在领导给了新需求, 要求定时执行一个存储过程, 时间是每旬跑一次, [color=red]即 每个月的 1 号, 11 号, 21 号 跑[/color]

[color=red]v_interval 的值如何确定[/color], 实在是想不到好的解决方案. 希望各位给个建议

实在是没分了...

[b]问题补充:[/b]

哈哈.

max_annie 的回复有意思

  • 写回答

2条回答

  • 不要废思 2010-01-06 18:21
    关注

    我的笨方法:
    做3个任务相同的JOB,v_interval值依次是
    1)trunc(SYSDATE,'mm')+1/24 1号的
    2)trunc(SYSDATE,'mm')+10+1/24 11号的
    3)trunc(SYSDATE,'mm')+20+1/24 21号的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能