【发布时间】:2013-04-03 19:53:53
【问题描述】:
我有一个问题,我觉得解决方案很简单,但我想不通。
A 有一个多线程环境和一个 pl sql 存储过程。 在这个过程中,我有类似的东西:
select * into mycount from toto;
If mycount >0 then update...;
else insert ...;
问题是我有很多线程调用这个过程。
有没有一种简单的方法可以一次只让一个线程执行上面的代码?
我知道我可以使用select for update,但因为我可以有一个 UPDATE 或 INSERT 我想这对我不起作用。
非常感谢。
【问题讨论】:
-
尝试在过程调用的末尾添加一个提交,这样线程就不会在你的表上保持独占的 DML 操作。任何 DDL 都可能打破锁。
-
第一个
select不是必需的。只需运行update并检查更新的行数。它为零,执行插入(这样“选择”只会执行一次)。或使用MERGE语句。
标签: sql multithreading oracle plsql