我遇到了一個問題,我的印象是解決方案很簡單,但我無法弄清楚。oracle select&update或在多線程環境中選擇並插入
A有一個多線程環境和一個pl sql存儲過程。 這裏面的過程我有類似的東西:
select * into mycount from toto;
If mycount >0 then update...;
else insert ...;
的問題是,我有很多的線程調用這個程序。 是否有一種簡單的方法一次只有一個線程執行上面的一段代碼? 我知道我可以使用select for update
,但因爲我可以有更新或插入我想這不適用於我。
非常感謝。
嘗試在過程調用結束時添加一個提交,以便逐個線程不會保留表上的獨佔DML操作。任何DDL都可能破壞Lock。 –
好主意。謝謝。 –
第一個'select'不是必需的。只需運行'update'並檢查更新的行數。這是零,做插入(這種方式「選擇」將只做一次)。或者使用'MERGE'語句。 –