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