Env: Oracle 12 c
У меня есть таблица с именем JOB_TABLE , которая имеет следующие значения:
ID JOB_ID DATA2 STATUS
------ -------- -------- -------
1 100 AAA NEW
2 100 BBB NEW
3 100 CCC NEW
Используя этот JOB_TABLE, Мне нужно обработать все записи индивидуально на основе JOB_ID, переданного в вызов процедуры, это экземпляр, который будет 100
Теперь мне нужно l oop через каждую запись по порядку, снова один в время и передайте значение столбца JOB_DATA.DATA2
в другую подпрограмму, которая в конечном итоге обновит значение STATUS этой другой таблицы, называемой DATA_TABLE
, либо PASS
, либо FAIL
В этом случае: DATA_TABLE
ID DATA2 STATUS
------ -------- -------
1 AAA Pending
Поскольку я не знаю, когда будет обновлено значение STATUS этого DATA_TABLE (на основе REST API асинхронного ответа), я создал задание Oracle DBMS_SCHEDULER для выполнения SYSDATE + 5 секунд, как показано:
DBMS_SCHEDULER.create_job
(job_name => in_job_name,
job_type => 'PLSQL_BLOCK',
job_action => 'begin get_data_status; end;',
number_of_arguments => 0,
start_date => sysdate + NUMTODSINTERVAL(5, 'SECOND'),
repeat_interval => null,
enabled => TRUE,
auto_drop => TRUE
);
JOB_ACTION вызывает другую процедуру PL / SQL с именем get_data_status
, которая просто проверяет значение состояния для записи AAA.
if status = 'OK' then
-->> I now want to go back to JOB_TABLE above and now process the next available record, i.e. `BBB`
and perform the same process above again for this record and so on, until no JOB_TABLE records
exist for JOB_ID: 100
elsif status = 'Pending' then
-->> call DBMS_SCHEDULER process above again for same 'AAA' record and check DATA_TABLE.STATUS
else
--> process ERROR
end if;
На основании вышеизложенного, Я не уверен, как go об обработке мой JOB_TABLE в последовательном порядке вместе с планировщиком, чтобы все мои задания для JOB_ID: 100 обрабатывались по отдельности.
Я не могу использовать FOR L OOP, так как не хочу переходить к Следующая работа, пока я не вернусь СОСТОЯНИЕ ОК в DATA_TABLE.
Любые идеи о том, как структурировать это, будут полезны.