【发布时间】:2011-10-26 13:59:23
【问题描述】:
我有一个过程是这样的:
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 - 这不是我想要的。我不想重复。
那么,如何将整个代码标记为原子?我希望选择和更新同时运行并且是线程安全的。我希望将两个语句一起标记为原子。
【问题讨论】:
标签: oracle stored-procedures plsql