我有这2条jdbc语句(Oracle 10g具有已提交的隔离级别读)
delete from emp where emp_id = 1;
insert into emp (emp_id,address,.....) value (1,'newyork',.....);emp_id,地址是主键
不幸的是,在多线程环境中,我得到了ORA-00001:在插入记录时违反了唯一约束。
当我在一个线程中运行时,我没有看到任何问题。
经过调查我发现
committed.
会话删除它,第一次会话现在提交给它,
如果我遗漏了什么就告诉我。
我不喜欢单线程的解决方案,也不喜欢重试的解决方案。
有干净的溶液吗?
发布于 2022-01-26 01:32:23
确保在程序中启用了AUTOCOMMIT,然后在插入行之前检查该行是否存在,以防止ORA-00001。下面是PL/SQL块。
declare
v_rows_count number;
begin
select count(*) into v_rows_count from emp where emp_id = 1;
if v_rows_count = 0 then
-- Insert the row
else
-- Do not insert the row
end if;
end;
/别忘了以后再改。
https://stackoverflow.com/questions/70857414
复制相似问题