pengdali(大力 V3.0) 兄,帮我一下,存储过程的问题

white_dove3000 2003-10-15 05:10:07
我先用pl/sql developer写了一个存储过程,最简单的,运行通过。
create or replace procedure test is
a varchar2(8);
b varchar2(8);
begin
select ia1,ia2 into a, b from test2;
insert into test2(ia1,ia2) values (a, to_char(to_number(b)+1));
delete from test2 where ia2 =b;
commit;

end test;
下面我想建一任务,使其每过一分钟运行上述过程一遍,我在sql plus下边输入如下命令:
SQL> Variable v_test NUMBER
SQL> begin
2 dbms_job.submit(:v_test,'test;',sysdate,'sysdate + (60/(24*60*60))');
3 end;
4 /

上面的那个任务,我写进去之后,写进去的时间是:10时:40分:41秒,但它并不是每分钟执行一次,而是没有执行啊,写进去之后我的服务器是重新启动过的,
我执行如下语句:select job, interval, next_sec from user_jobs
结果显示为 job interval next_sec
1 sysdate+(60/(24*60*60)) 10:40:41

这是怎么回事啊??

如果我想让这个任务每个月的1号执行一遍,我该如何设置??

...全文
36 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
white_dove3000 2003-10-17
  • 打赏
  • 举报
回复
大力兄,以及楼上回答问题的兄弟们,谢谢你们,万分感谢!!!
pengdali 2003-10-16
  • 打赏
  • 举报
回复
修改间隔时间:dbms_job.interval(job,interval);

select sysdate,next_day(sysdate,1) 下一个星期日,add_months(sysdate,1) 加一月,trunc(sysdate,'q') 裁减到季度 from dual;
white_dove3000 2003-10-16
  • 打赏
  • 举报
回复
exec dbms_job.interval(21,'next_day(add_months(trunc(sysdate,''q''),1),1)');
请问这句话是什么意思??
bzszp 2003-10-16
  • 打赏
  • 举报
回复
'sysdate + (60/(24*60*60))'
->
'trunc(sysdate+32,'mm')'
sorry,这样好像有单引号的问题
这样:
'trunc(sysdate+32,''mm'')'
linuxyf 2003-10-16
  • 打赏
  • 举报
回复
兄弟们,再回答我上面的这一个问题好吗,那是什么意思????

谢谢楼上的兄弟们,要揭帖了。
pengdali 2003-10-16
  • 打赏
  • 举报
回复
dbms_job.run(1);
呵呵。重起,你可以试试呀。


它每个月的1号运行可以

'trunc(sysdate+32,'mm')'如:

select to_char(trunc(sysdate+32,'mm'),'yyyy-mm-dd hh:mi:ss') from dual;
bzszp 2003-10-16
  • 打赏
  • 举报
回复

dbms_job.run(1);
这不是系统自动调用,但是它也同样计算并修改了下次执行的时间
bzszp 2003-10-16
  • 打赏
  • 举报
回复
'sysdate + (60/(24*60*60))'
->
'trunc(sysdate+32,'mm')'
white_dove3000 2003-10-16
  • 打赏
  • 举报
回复
pengdali(大力 V3.0)兄,begin
dbms_job.run(1);
end;
这个只是人为地调用了一次,不是系统自动地调用的吧??
white_dove3000 2003-10-16
  • 打赏
  • 举报
回复
如果我想让它每个月的1号运行,该如何设置??
pengdali 2003-10-16
  • 打赏
  • 举报
回复
忘了说你的过程这样不是也可?

create or replace procedure test is
begin
update test2 set ia2=to_char(to_number(ia2)+1);
commit;
end;
pengdali 2003-10-15
  • 打赏
  • 举报
回复
删除job:dbms_job.remove(jobno);
修改job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
pengdali 2003-10-15
  • 打赏
  • 举报
回复
begin
dbms_job.run(1);
end;

就OK了。
robixiao 2003-10-15
  • 打赏
  • 举报
回复
如果要使JOB运行,需要在INIT.ORA中确定如下参数:
time_static=true
time_internal=60 -- 需要<=JOB的间隔时间(单位为秒)
参数的名字不知有没拼写错误,一般的现有的ORA文件中是有的,只是值需要改下
white_dove3000 2003-10-15
  • 打赏
  • 举报
回复
里边是只有一条记录。
beckhambobo 2003-10-15
  • 打赏
  • 举报
回复
问题在于过程:
确保select ia1,ia2 into a, b from test2; --没有记录,或只有一条记录

另外:
declare
v_test NUMBER;
begin
dbms_job.submit(v_test,'test;',sysdate,'add_months(trunc(sysdate,''mm''),1)');
commit;
end;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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