'While Statement' 职位 运行 甲骨文
'While Statement' for jobs running oracle
我有一个游标来获取处于 运行 或 SCHEDULED
状态的游标数据
CURSOR cursorJobStatus IS
SELECT d.job_name, d.state
FROM dba_scheduler_jobs d
WHERE REGEXP_LIKE(d.job_name, '^(P_|S_|B_)')
AND d.state IN ('RUNNING','SCHEDULED');
如何在 'cursorJobStatus' 中存在数据时执行循环,也就是说,只要有 'jobs' 处于 运行 或 SCHEDULED 状态?
我试过这个 'for' 但它不起作用,因为只根据它找到的记录进入 'for' 而不是一直询问游标的状态
FOR lrtJobStatus IN cursorJobStatus LOOP
BEGIN
DBMS_LOCK.SLEEP(5);
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
EXIT WHEN cursorJobStatus%NOTFOUND;
END LOOP;
感谢您的帮助!
也许是这样的:
declare
l_job_running pls_integer;
begin
loop
begin
select 1
into l_job_running
from dual
where exists (select 1
from dba_scheduler_jobs d
where regexp_like(d.job_name, '^(P_|S_|B_)')
and d.state in ('RUNNING', 'SCHEDULED'));
exception
when no_data_found then
l_job_running := 0;
end;
exit when l_job_running = 0;
dbms_lock.sleep(5);
end loop;
end;
尝试创建一个匿名块,它将检查当前作业 运行 并将继续执行直到有作业正在执行。我想你也可以用同样的方法实现你的 objective。
set serveroutput on;
declare
var1 number default '1';
begin
loop
dbms_output.put_line('inside the loop');
select count(*) into var1 from dba_jobs_running;
exit when var1=0;
dbms_output.put_line('job/jobs are executing');
end loop;
dbms_output.put_line('anonymous block completes');
end;
我有一个游标来获取处于 运行 或 SCHEDULED
状态的游标数据CURSOR cursorJobStatus IS
SELECT d.job_name, d.state
FROM dba_scheduler_jobs d
WHERE REGEXP_LIKE(d.job_name, '^(P_|S_|B_)')
AND d.state IN ('RUNNING','SCHEDULED');
如何在 'cursorJobStatus' 中存在数据时执行循环,也就是说,只要有 'jobs' 处于 运行 或 SCHEDULED 状态?
我试过这个 'for' 但它不起作用,因为只根据它找到的记录进入 'for' 而不是一直询问游标的状态
FOR lrtJobStatus IN cursorJobStatus LOOP
BEGIN
DBMS_LOCK.SLEEP(5);
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
EXIT WHEN cursorJobStatus%NOTFOUND;
END LOOP;
感谢您的帮助!
也许是这样的:
declare
l_job_running pls_integer;
begin
loop
begin
select 1
into l_job_running
from dual
where exists (select 1
from dba_scheduler_jobs d
where regexp_like(d.job_name, '^(P_|S_|B_)')
and d.state in ('RUNNING', 'SCHEDULED'));
exception
when no_data_found then
l_job_running := 0;
end;
exit when l_job_running = 0;
dbms_lock.sleep(5);
end loop;
end;
尝试创建一个匿名块,它将检查当前作业 运行 并将继续执行直到有作业正在执行。我想你也可以用同样的方法实现你的 objective。
set serveroutput on;
declare
var1 number default '1';
begin
loop
dbms_output.put_line('inside the loop');
select count(*) into var1 from dba_jobs_running;
exit when var1=0;
dbms_output.put_line('job/jobs are executing');
end loop;
dbms_output.put_line('anonymous block completes');
end;