定时调用存储过程操作表 我要按照时间调用一个存储过程,比如晚上12点,这个存储过程来实现在晚上12点时,把数据库中一个表的数据导入到另一个表,请问如何操作? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用job,定时启动执行该存储过程。 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,有不明白的可以去参考一下 这个问题一直困惑我 求解:这样的SQL语句如何查询 各位大哥救救小弟!关于不同表空间的问题? Oralce服务器性能的问题 问一个触发器的问题:使用触发器时能不能知道具体是哪一条记录(字段)被插入、删除、修改啊? developer2000的设置问题, 关于客户端连接的问题。50分相送 PL/SQL中的小问题。 oracle创建与mysql的dblink 失败 新手求教 oracle安装完成后cmd命令行输入sqlplus出错 求助, oracle问题 跪求ORACLE学习群~~
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
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;