我的DBMS_SCHEDULER.CREATE_JOB不是运行?

My DBMS_SCHEDULER.CREATE_JOB not running?

我正在 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;

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

select * from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name = 'MI_TRABAJO';

DBA_JOBS_RUNNING 视图中,您只能看到当前 运行 个使用 DBMS_JOBS 包创建的作业。但是,即使是他们,也最好检查一下DBA_JOBS.LAST_DATE,因为工作可以很快完成工作。

您的作业执行失败并出现此错误:

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子句中的双引号(where id_ind = "8";',)。作业执行后,您可以从该查询中获取详细信息。

select * from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name = 'MI_TRABAJO';