我的DBMS_SCHEDULER.CREATE_JOB没有运行?

时间:2016-01-14 21:29:53

标签: oracle oracle11g oracle-sqldeveloper

我在oracle 11g express中创建了一个作业,并且它没有每隔5分钟用执行的作业更新值,当我查看这个以查看正在运行的作业数时,我得到0:

select count(*) from dba_jobs_running;

我尝试使用提交,但也没有工作。这是我的问题:

 CREATE TABLE Individuo
(
  id_ind int primary key,
  nom_ind Varchar(255),
  ape_ind Varchar(255),
  sal_ind int
)

DROP table Individuo;

insert into Individuo values(1, 'Carlos', 'Guzman', 100);
insert into Individuo values(2, 'Hidalgo', 'Machado', 200);
insert into Individuo values(3, 'Guillermo', 'Pinto', 500);
insert into Individuo values(4, 'Katia', 'Barba', 300);
insert into Individuo values(5, 'Fernando', 'Parra', 500);
insert into Individuo values(6, 'Celesta', 'Valdes', 100);
insert into Individuo values(7, 'Carola', 'Vallez', 700);
insert into Individuo values(8, 'Catalina', 'Riveron', 800);
insert into Individuo values(9, 'Pepe', 'Najarro', 400);
insert into Individuo values(10, 'Paz', 'Cuenca', 200);

BEGIN
DBMS_SCHEDULER.CREATE_JOB 
(
   job_name             => 'MI_TRABAJO',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'UPDATE Individuo SET sal_ind = sal_ind+1 where id_ind = "8";',
   start_date           =>  SYSDATE,
   repeat_interval      => 'FREQ=MINUTELY', 
   comments             => 'La insercion en la tabla Individuo tuvo exito'
);
END;

select * from Individuo;

BEGIN
  DBMS_SCHEDULER.ENABLE('MI_TRABAJO');
END;

BEGIN
  DBMS_SCHEDULER.RUN_JOB('MI_TRABAJO', True);
END;

SELECT * FROM dba_scheduler_jobs WHERE job_name = 'MI_TRABAJO';

SELECT * FROM dba_scheduler_jobs WHERE job_name = 'MI_TRABAJO'; 

EXEC DBMS_SCHEDULER.DROP_JOB('MI_TRABAJO'); 

commit;

select count(*) from dba_jobs_running;

2 个答案:

答案 0 :(得分:2)

您的作业执行因此错误而失败:

ORA-06550: line 1, column 807:
PL/SQL: ORA-00904: "8": invalid identifier
ORA-06550: line 1, column 750:
PL/SQL: SQL Statement ignored

您必须在作业操作部分修改DBMS_SCHEDULER.CREATE_JOB的更新语句。

替换

job_action           => 'UPDATE Individuo SET sal_ind = sal_ind+1 where id_ind = "8";',

job_action           => 'UPDATE Individuo SET sal_ind = sal_ind+1 where id_ind = 8;',

只需从where子句中删除双引号(其中id_ind =" 8&#34 ;;',)。执行作业后,您可以从此查询中获取详细信息。

select * from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name = 'MI_TRABAJO';

答案 1 :(得分:0)

您正在创建调度程序作业,而不是常规作业。您可以在DBA_SCHEDULER_RUNNING_JOBS视图中找到有关当前正在运行的调度程序作业的信息,以及DBA_SCHEDULER_JOB_RUN_DETAILS中所有调度程序作业的运行历史记录。因此,只需检查此查询输出中的状态和错误#字段:

select * from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name = 'MI_TRABAJO';

DBA_JOBS_RUNNING视图中,您只能看到使用DBMS_JOBS包创建的当前正在运行的作业。但是,即使对他们来说,最好还是检查DBA_JOBS.LAST_DATE,因为工作可以非常快地完成工作。