首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调度程序/ SQL开发程序中的Oracle DBMS作业

调度程序/ SQL开发程序中的Oracle DBMS作业
EN

Stack Overflow用户
提问于 2014-02-20 09:42:16
回答 1查看 931关注 0票数 0

我有以下程序

代码语言:javascript
复制
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点运行?而且,如果工作失败了,我怎么能找到它。

有什么建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-02-20 09:46:35

代码语言:javascript
复制
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

关于手术的事。游标方法效率低,速度慢,且不可伸缩.您的过程可以在没有循环或游标的情况下重写:

代码语言:javascript
复制
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 ...部件中指定目标表的所有列也是很好的编码实践。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21903847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档