我有以下程序
create or replace
procedure test_vinod_cur
is
cursor emp_cur is select * from test_vino ;
emp_rec test_vino%rowtype;
BEGIN
open emp_cur;
loop
fetch emp_cur into emp_rec;
EXIT WHEN EMP_CUR%NOTFOUND;
insert into test_vino_id values (emp_rec.emp_id,emp_rec.emp_name);
end loop;
CLOSE EMP_CUR;
commit work;
END;如何通过sql developer窗口中的DBMS作业安排此过程,以便它每天上午9点运行?而且,如果工作失败了,我怎么能找到它。
有什么建议吗?
谢谢
发布于 2014-02-20 09:46:35
exec dbms_scheduler.create_job(
job_name => 'INSERT_VINO',
job_type => 'STORED_PROCEDURE',
job_action => 'test_vinod_cur',
repeat_interval => 'freq=daily;byhour=9;byminute=00',
end_date => NULL,
enabled => TRUE);注意: SQL*Plus不会运行上述操作,因为您不能在多行上调用存储过程(但我认为在这个答案中更容易读懂,而我的SQL没有这个限制)。
不知道SQL,但是如果它失败了,尝试将整个exec调用放在一行上。
有关dbms_scheduler包的更多详细信息可以在手册中找到:
sched.htm#CIHHBGGI
关于手术的事。游标方法效率低,速度慢,且不可伸缩.您的过程可以在没有循环或游标的情况下重写:
create or replace procedure test_vinod_cur
is
BEGIN
insert into test_vino_id (emp_id, emp_name)
select emp_id, emp_name
from test_vino;
commit work;
END;
/那会快得多。在insert into ...部件中指定目标表的所有列也是很好的编码实践。
https://stackoverflow.com/questions/21903847
复制相似问题