oracle sequence thread safety是否可以在其他线程尝试下一个线程时返回其线程的曲线

oracle sequence thread safety是否可以在其他线程尝试下一个线程时返回其线程的曲线,oracle,plsql,Oracle,Plsql,我知道oracle序列在递增时应该是线程安全的。但是,当仅检索当前值时会发生什么情况 比如说下面的例子 BEGIN FOR i IN 1..10 LOOP IF i = 1 THEN INSERT INTO TABLE1 (COLUMN1, COLUMN2) VALUES (test_seq3.NEXTVAL,'BB'); ELSE INSERT INTO TABLE1 (COLUMN1, COLUMN2)

我知道oracle序列在递增时应该是线程安全的。但是,当仅检索当前值时会发生什么情况

比如说下面的例子

BEGIN 
    FOR i IN 1..10 LOOP
        IF i = 1 THEN
            INSERT INTO TABLE1 (COLUMN1, COLUMN2) VALUES (test_seq3.NEXTVAL,'BB');
        ELSE
            INSERT INTO TABLE1 (COLUMN1, COLUMN2) VALUES (test_seq3.CURRVAL,'BB');
        END IF;                
    END LOOP;
END;

如果我在两个不同的线程中运行上述语句,在第一个循环完成之前,test_seq3是否可能增加两次?

是,但当前值对于给定的会话是一致的


你为什么不试试看;您几乎已经编写了一个测试用例

CURRVAL只是该会话序列返回的最后一个值。线程安全性不在其中。@JeffreyKemp那么会话是每次插入对吗?不,整个PL/SQL块在单个会话中执行。因此,此代码将为所有10行插入相同的值。在这种情况下,会话指的是每次插入?它指的是整个开始;结束;块