У меня есть процедура, которая выглядит следующим образом:
create or replace
PROCEDURE NEWJOBIDPROC (JOB_ID OUT NUMBER )
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
-- PROCEDURE TO RETRIEVE THE JOB ID
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
IS
BEGIN
-- select the job_id
SELECT VALUE+1 INTO JOB_ID FROM JOB_TABLE WHERE ID = 50;
-- update table JOB_TABLE with the latest job id
UPDATE JOB_TABLE SET VALUE = JOB_ID WHERE ID = 50;
END;
Теперь мой вопрос заключается в следующем.
Допустим, у меня есть несколько вызовов этой процедуры одновременно.В нашем примере давайте сделаем два одновременных вызова одной и той же процедуры.Когда они оба запускают оператор select, они получают какое-то значение - пусть оно будет 200.
Теперь они оба обновят job_table с тем же значением 200 - что не то, что я хочу.Я не хочу дубликатов.
Итак, как мне пометить весь код как атомарный?Я хочу, чтобы select и обновление выполнялись одновременно и были безопасны для потоков.Я хочу, чтобы два утверждения вместе были помечены как атомарные.