2013-08-01 25 views
0

關於這個問題,如果創建一個查詢以確保只有一個事務在多個線程一起進入時才能工作?SQL更新並選擇線程安全(如果多個線程正在運行,則只允許更新1個)

UPDATE DPCM_BRANCH SET COUNTER = COUNTER+1 WHERE BRANCH=213546 and (SELECT COUNTER from dpcm_branch where counter = 122); 

以上只是一個示例。我確定上面的代碼返回錯誤。

我用C#和Oracle SQL編寫代碼。

對於上面的代碼,當COUNTER與最新的COUNTER(122)匹配時,我想更新COUNTER。

有人能幫助我嗎?

+0

我很肯定你爲甲骨文付出的一千億美元會付給一些軟件工程師,他們的工作是爲你管理鎖定。 –

+0

爲什麼這麼說? –

回答

2
UPDATE DPCM_BRANCH SET COUNTER = COUNTER + 1 
     WHERE BRANCH = 213546 and counter = 122; 

我不知道你的需要,但如果我們的目標是序列化線程,到時將能獲得該行鎖的更新可以只發生,阻止其他線程,直到持有人進行提交或回滾。