2012-04-24 65 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

相关问题