我在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;
答案 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
,因为工作可以非常快地完成工作。