定时调用存储过程操作表
我要按照时间调用一个存储过程,比如晚上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,有不明白的可以去参考一下