首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

定时调用存储过程操作表,该如何解决

2012-01-26 
定时调用存储过程操作表我要按照时间调用一个存储过程,比如晚上12点,这个存储过程来实现在晚上12点时,把数

定时调用存储过程操作表
我要按照时间调用一个存储过程,比如晚上12点,这个存储过程来实现在晚上12点时,把数据库中一个表的数据导入到另一个表,请问如何操作?

[解决办法]


Oracle dbms_job package 用法小结
http://blog.csdn.net/tianlesoftware/archive/2009/10/21/4703133.aspx




------------------------------------------ 
Blog: http://blog.csdn.net/tianlesoftware 
网上资源: http://tianlesoftware.download.csdn.net 
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
DBA1 群:62697716(满); DBA2 群:62697977
[解决办法]
在COMMAND下修改下面代码后,运行:
VARIABLE job1 NUMBER;
begin
sys.dbms_job.submit(job => :job1,
what => '过程名称;',
next_date => sysdate,
interval => 'trunc(sysdate) + 1');
commit;
end;
/

解释:
job => :job1 代表其中job1是外部定义的参数,当创建JOB的时候,会返回一个数字,为JOB编号。
what => '过程名称;' 写入过程名称,后面一定要带一个“分号”,否则创建时会报错。 
next_date => sysdate 下次执行时间,这里可以使用当前时间为准,你可以自己修改。
interval => 'trunc(sysdate) + 1' 代表从以当天开始林晨计算,向后推一天进行运行,运行完后再从当前开始计算,所以就是循环计算起来了。

这个里面注意到一些有引号,一些没有,按照这个规则即可。

有部分版本的ORACLE默认JOB的队列尚未启动,用DBA在命令行进入SQLPLUS后,查看JOB运行:
show parameter job_queue_processes;
若该值为0,则需要修改:
alter system set job_queue_processes =10;

根据实际情况修改为相应值即可。


手工运行JOB为(当JOB被BROKEN后,手工运行一次,自动重启任务):
begin
 dbms_job.run(JOB编号);--这个JOB编号以及下面的JOB编号,都是上面创建时得到的那个JOB的编号 
END;

暂停JOB(BROKEN)
BEGIN
sys.dbms_job.broken(job => JOB的编号,broken => TRUE);
commit;
end;
暂停后重启JOB(BROKEN)
BEGIN
sys.dbms_job.broken(job => JOB的编号,broken => FALSE);
commit;
end;

删除JOB:
begin
sys.dbms_job.remove(job => JOB的编号);
commit;
END;

[解决办法]
先写一个插入表数据的存储过程,然后写个job,定时执行这个过程就行了,我QQ空间有个简单job的例子,QQ号597795325,有不明白的可以去参考一下

热点排行