用JOB执行存储过程遇到的一个问题

xiaozhaoyun 2013-01-21 02:58:19
我想用JOB执行一个存储过程循环向一个表插入当前时间,但在实际操作中发现,用JOB执行时,插入的时间就不对了,单独执行插入语句,时间就是正确的,很困惑,希望高手解答。

创建表
create table test (edata char(20));

创建存储过程
create or replace procedure insert_test as
begin
insert into test values(to_char(current_date,'DD-MM-YYYY hh24:mi:ss'));
commit;
end insert_test;

创建作业,10秒一次
declare
job number;
begin
dbms_job.submit(job,'insert_test;',sysdate,'sysdate+10/(24*60*60)');
end;

实际结果
select * from test;
21-01-2013 14:31:24 //直接执行插入
21-01-2013 14:31:27
21-01-2013 14:32:40
21-01-2013 06:36:05 //用JOB执行的插入
21-01-2013 06:36:10
21-01-2013 06:36:15
21-01-2013 06:36:20
21-01-2013 06:36:25

用JOB执行的插入时间少了8个小时,有高手知道原因吗?谢谢啦
...全文
707 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaozhaoyun 2013-02-22
  • 打赏
  • 举报
回复
这个问题搞清楚了,不是三位说的原因,是JOB频率我设置的太快了,我设置的1秒,我上面写的10秒,当JOB频率被设置为1秒时,就会出现我这个问题(插入时间少8小时),我设置成1秒虽然ORACLE可以自动调整为5秒,但插入时间时依然会出错。我这就是一个实验,实际环境也不可能5秒一个JOB。。。把JOB频率调整低一点就不会出现我这个问题了,谢谢三位的解答。
BUG胡汉三 2013-01-22
  • 打赏
  • 举报
回复
把过程中的current_date换成sysdate吧!
raymonshi 2013-01-22
  • 打赏
  • 举报
回复
楼上正解 SYSDATE 系统时间 CURRENT_DATE 会话时间 SYSDATE函数返回服务器的当前日期和时间,而CURRENT_DATE函数返回当前会话时中的当前日期和时间 一般情况下,二者相同。但如果修改了当前会话的时区,则会不同。 Sql代码 SQL> SELECT SESSIONTIMEZONE FROM DUAL; SESSIONTIMEZONE ------------------------------ +08:00 SQL> SELECT SYSDATE,CURRENT_DATE FROM DUAL; SYSDATE CURRENT_DATE ----------------- ----------------- 20060211 20:04:51 20060211 20:04:51 SQL> ALTER SESSION SET TIME_ZONE='+09:00'; 会话已更改。 SQL> SELECT SYSDATE,CURRENT_DATE FROM DUAL; SYSDATE CURRENT_DATE ----------------- ----------------- 20060211 20:05:00 20060211 21:05:00
kingkingzhu 2013-01-22
  • 打赏
  • 举报
回复
一个 current_date 是回话时间 一个 sysdate 系统时间 select current_date from dual; select sysdate from dual 这两个查询结果相同么你的

17,086

社区成员

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

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