Oracle中,可能会遇到写这样的存储过程,先删除表数据,然后向表中插入数据,对于我们新手来说,很容易遇到这样的问题,直接调用 truncate table tablename; 这样会报错的,正确的写法如下:
create or replace procedure procedurename
begin
execute immediate 'TRUNCATE TABLE ds_dwsjfx';
insert into ds_dwsjfx select * from ...;
commit;
end procedurename;
存储过程写完以后,如果想每天定时调用这个存储过程,应该怎么实现,本人开始的做法是:
先写个方法来实现删除、插入的操作,然后来个定时器每天定时来执行这个方法,最后再来个监听器监听定时器;这样的做法虽然能实现我想要的东西,但有点麻烦。在数据库中可以直接实现这样的功能:
首先写好自己需要的存储过程,接下来就很重要了:
创建job,在PL/SQL的Command Window下执行如下语句:
variable sjfx_job number; --唯一标识job
begin
sys.dbms_job.submit(job => :sjfx_job,
what => 'procedurename;', --调用存储过程
next_date => sysdate, --下次执行时间
interval => 'sysdate+1'); --执行间隔
commit;
end;
/
这样既可每天定时执行自己的存储过程