问一个低级问题:我想让数据库在每天定时执行一个存储过程,如何实现?

liupengliupeng 2005-09-23 05:48:03
问一个低级问题:我想让数据库在每天定时执行一个存储过程,如何实现?
...全文
400 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
htjian 2005-09-29
  • 打赏
  • 举报
回复
对用job!
ymyy 2005-09-28
  • 打赏
  • 举报
回复
job信息
小李木耳 2005-09-26
  • 打赏
  • 举报
回复
也可以用pro*c写个程序,编译之后用sh文件调用。不过有点麻烦!
llin998 2005-09-26
  • 打赏
  • 举报
回复
对,用JOB

可以在表中配置JOB

CREATE OR REPLACE package body pkg_jobs as

--处理任务,定期的将SMS_PREPARE中超时纪录删除
procedure proc_job1
as
v_sqlerrm VARCHAR2(600);
BEGIN
--INSERT INTO LOG_INFO (USERNAME, LOG_TIME, ACTION) VALUES ('JOB1' ,sysdate,'JOB EXEC1') ;
LOOP
DELETE FROM SMS_PREPARE WHERE SEND_TIME < SYSDATE AND ROWNUM < 201;
EXIT WHEN SQL%NOTFOUND;
COMMIT;
END LOOP;
COMMIT;
--INSERT INTO LOG_INFO (USERNAME, LOG_TIME, ACTION) VALUES ('JOB1' ,sysdate,'JOB EXEC2') ;

EXCEPTION
WHEN OTHERS THEN
v_sqlerrm := SUBSTR(SQLERRM,1,600);
INSERT INTO ERR_LOG(LOG_TIME,DETAILS)
VALUES(SYSDATE,'ERROR OCCUR IN PKG_JOBS.PROC_JOB1,REASON:' || v_sqlerrm);
END;

/*
添加任务
说明:
1、根据数据库中的配置添加一个任务;
*/
procedure add_job(iv_job in number)
as
v_job_id jobontime.job_id%TYPE;
v_job_what jobontime.JOB_WHAT%TYPE;
v_job_next_date jobontime.Job_next_date%TYPE;
v_job_interval jobontime.JOB_INTERVAL%TYPE;
BEGIN
select job_id,job_what,job_next_date,job_interval
into v_job_id,v_job_what,v_job_next_date,v_job_interval
from jobontime
where job_id = iv_job;

dbms_job.isubmit(v_job_id,v_job_what,to_date(v_job_next_date,'YYYYMMDDHH24MI'),v_job_interval);
END;

/*
删除任务
说明:
1、删除一个任务;
*/
procedure remove_job(iv_job in number)
as
BEGIN
dbms_job.REMOVE( iv_job );
END;

/*
开始任务
说明:
1、根据数据库中的配置添加一个任务;
2、使用Run让任务开始执行;
*/
procedure start_job(iv_job in number)
as
v_job_id jobontime.job_id%TYPE;
v_job_what jobontime.JOB_WHAT%TYPE;
v_job_next_date jobontime.Job_next_date%TYPE;
v_job_interval jobontime.JOB_INTERVAL%TYPE;
BEGIN
select job_id,job_what,job_next_date,job_interval
into v_job_id,v_job_what,v_job_next_date,v_job_interval
from jobontime
where job_id = iv_job;

dbms_job.isubmit(v_job_id,v_job_what,to_date(v_job_next_date,'YYYYMMDDHH24MI'),v_job_interval);
dbms_job.run(v_job_id);
END;

/*
重新开始任务
说明:
1、删除一个任务;
2、根据数据库中的配置添加一个任务;
3、使用Run让任务开始执行;
*/
procedure restart_job(iv_job in number)
as
v_job_id jobontime.job_id%TYPE;
v_job_what jobontime.JOB_WHAT%TYPE;
v_job_next_date jobontime.Job_next_date%TYPE;
v_job_interval jobontime.JOB_INTERVAL%TYPE;
BEGIN
dbms_job.remove(iv_job);
select job_id,job_what,job_next_date,job_interval
into v_job_id,v_job_what,v_job_next_date,v_job_interval
from jobontime
where job_id = iv_job;

dbms_job.isubmit(v_job_id,v_job_what,to_date(v_job_next_date,'YYYYMMDDHH24MI'),v_job_interval);
dbms_job.run(v_job_id);
END;

end;
/
laofang 2005-09-26
  • 打赏
  • 举报
回复
使用JOB:
---
--建立一存储过程
create or replace procedure log_proc as
begin
insert into test(aa) values(sysdate);
commit;
end;
---
--提交一个job
declare
job_num number;
begin
dbms_job.submit(job_num,'log_proc;',sysdate,sysdate+5/(24*60*60),false);
dbms_output.put_line('Job numer='||to_char(job_num));
end;

--说明:
1> 上面程序从当前开始,间隔5秒执行一次。
2> 如果每天几点执行,可以写为(比如从2004-09-13开始执行,每天7点执行)
next_date => to_date('13-09-2004 07:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate)+(7+24)/24')
3> 如果是每个月几号开始执行。比如每月2号21点执行。
add_months(trunc(sysdate,'MONTH'),1) + 2-1 + 21/24
minitoy 2005-09-23
  • 打赏
  • 举报
回复
用job
对其功能的要求也越来越高 —— 这类软件密码管理功能大同小异,至于各类加密算法更不是我等菜鸟能明白的,只要不是低级到用明文保存,我一般人也就够用了。因此其附加功能就成了选择使用的亮点。今天大眼仔向大家介绍的这款密码管理新秀 —— KeePass 密码保险箱,就是凭其独特的功能让我“一旦拥有、别无所求”的,相信经过我的介绍,你也会喜欢上它的。 KeePass Password Safe 绿色中文版 对于 KeePass 相对其它同类工具出类拔萃的优势,我也会结合用过的其它密码工具来介绍,这就是今天的两个配角:KeyPass 和 Password Agent ,后者是老牌的密码箱了,前者算得上独特的自动登录功能也曾让我心仪,但当后来发现了 KeyPass 一个致命的本地安全隐患后,我一直在寻找它的替代品,直到 KeePass 的出现,我才发现 KeyPass 的自动登录实在是不太方便。 KeePass Password Safe 就是专门为了解决人类记不得众多密码的所产生的,它包含了一个强大的密码产生引擎与加密储存机能,能够提供一个安全的密码储存空间。当你开始使用 KeePass Password Safe 时,要先决定一个起始密码。此密码用来辨识你的身分,决定你是否可以使用 KeePass Password Safe 软件,因此千万不要忘了。启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。 办公室电脑密码、笔记本密码、家里电脑密码、上网帐号密码、手机服务密码、邮箱密码、QQ 密码、银行卡查询密码、银行卡交易密码、银行卡网上支付密码……现在的我们需要记太多太多的密码。纵然我们可以使一些密码一致,但无法让所有的密码都一样,到头来,我们仍要记不少的密码,尤其是对于掌握信息系统的人来说,密码更多了。 实际上把密码记下来,也不代表不安全,完全留在脑中,反而容易忘记。所以有了 KeePass。 KeePass(KeePass Password Safe)密码管理系统是一款轻量级的,强大易用的开源密码管理系统,使用该系统,你可以方便的对各种文件加密,你的密码或者key文件存在数据库中。 Password Safe 主要有两部分作用: 1、生成不易于免费的随机密码:它自带了一个密码生成器,可以按照指定的字符类(大小写、数字、特殊符号)生成指定位数的密码。 2、分类管理密码:使用一个kdb扩展名的文件作为数据库,你可以指定数据库的加密算法和加密次数;密码你可以分类别进行管理,并且双击时可以自动打开URL字段的网址,自动复制用户名和密码字段的数据;复制到剪贴板的数据可以定时清除或者只允许粘贴一次。 Password Safe 优势 安全:截至此时应该没有泄露的风险,就算数据库丢了没访密码也不严重(它还可以使用一个文件作为加密密码,太BT我没有尝试); 方便:注册网站时首先创建一个新条目,随机生成密码后再填入注册网站,方便且密码多变。登录各个网站时,可以直接双击需要复制的字段,再去登陆框粘贴即可; 简单:没有大多数密码管理软件的繁琐,使用熟练后会非常舒心,数据库也仅一个kdb文件,压缩加密后放到邮箱就完成了备份; 多样:软件是开源的,数据库除了在Windows可以使用,在Linux、MacOS X、PocketPC、Symbian、BlackBerry、PalmOS等都可以使用。

17,136

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧