2012-04-24 34 views
1

我有一個存儲過程中使用的序列更新多個表就像如下:在數據庫中使用序列時,如何確保線程安全?

create procedure() 
    -- retrieve new sequence number 
    sequence.nextval(); 

    -- update table_A using newly created sequence number 
    insert into table_A(theID) values(sequence.currval()); 

    -- update table_B using newly created sequence number 
    insert into table_B(theID) values(sequence.currval()); 
end procedure; 

我可以知道上面的代碼是否是線程安全的實現?對於每個過程的執行,我可以保證table_A和table_B中的ID每次執行多個執行時總是檢索相同的序列號?

回答

1

Informix的主要目標之一是確保過程完全按照您的需要進行工作,而不管成千上萬的用戶同時運行相同的過程。事實上,您可以擁有多個併發會話,每個會話都運行該過程,每個會話都與所有其他會話隔離。

所以,顯示的代碼是'線程安全的'。

+0

非常感謝您的回覆,我知道這是否適用於觸發器?如果這是真的,那麼我可以節省很多努力。 ;) – huahsin68 2012-04-28 06:32:32

+1

是的,這同樣適用於觸發器內部。 – 2012-04-28 15:10:31

相關問題