2017-03-24 172 views
0

我知道,为了安排对数据库表的任何操作,我必须组成一个计划链,即连接计划的作业(DBMS_SCHEDULER.CREATE_JOB) DBMS_SCHEDULER.CREATE_SCHEDULE)和一个程序(DBMS_SCHEDULER.CREATE_PROGRAM)。但是如果我只想通过一个程序和一个链接的作业来完成同样的任务呢?可能吗 ?我已经试过,当我检查程序日志它显示我:通过Oracle计划任务执行Oracle计划程序

RUNS  FAILS 
====================== 
    10  10 

这意味着,这项工作已经10次(运行在5秒的时间间隔)被处决,却始终无法为相同数量的的时代。

以下是有关JOB和程序代码:

PROGRAM-CODE : 
================= 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_PROGRAM 
(
    program_name   => 'HR.INSERT_PROG' 
,program_type   => 'PLSQL_BLOCK' 
,program_action  => 'insert into sch_test values (s1.nextval,s2.nextval)' 
,number_of_arguments => 0 
,enabled    => TRUE 
,comments    => NULL 
); 
END; 


JOB-CODE : 
========== 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,schedule_name => 'HR.INSERT_SCH' 
    ,program_name => 'HR.INSERT_PROG' 
    ,comments  => NULL 
); 
END; 

有关表永远不会被填充。如果有人能告诉我,我在这里做错了什么?如果没有附表,这难道不能实现吗?

回答

2

您不必创建单独的方案和时间安排,你可以把所有在一个作业是这样的:

DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,start_date  => LOCALTIMETAMP 
    ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=5' 
    ,end_date  => NULL 
    ,job_class  => 'DEFAULT_JOB_CLASS' 
    ,job_type  => 'PLSQL_BLOCK' 
    ,job_action  => 'insert into sch_test values (s1.nextval,s2.nextval);' 
    ,enabled   => TRUE 
); 

命名时间表对象和命名的程序对象仅如果有几个人跑有用在复杂的组合和依赖。

+0

是的,这已经完成并检查,它的运行顺利和罚款。但只是为了好奇,我想知道是否可以用程序和工作来按照我的要求? 是的,谢谢你的答案兄弟! – hashir