在我的程序中,我写了这个
INSERT INTO questions(id, value) VALUES(my_seq.NEXTVAL, p_question);
INSERT INTO DEPENDENCIES(parent_question_id, child_question_id)
VALUES (my_seq.CURRVAL, my_seq.NEXTVAL);
假设序列的最后一个值等于 1。在这种情况下,我期望这个结果:
my_seq.NEXTVAL = 2;
my_seq.CURRVAL = 2;
my_seq.NEXTVAL = 3;
但它插入了这个:
my_seq.NEXTVAL = 2;
my_seq.CURRVAL = 3;
my_seq.NEXTVAL = 3;
我想知道oracle为什么以这种方式检索序列值?
最佳答案
如果您有三个单独的陈述:
那你就对了。但你只有两个
Currval 和 nextval 是单个原子步骤的一部分 - 在 nextval 之前不会处理 currval。
您需要为此使用变量:
DECLARE
l_parent_question_id NUMBER ;
l_child_question_id NUMBER ;
BEGIN
l_parent_question_id := my_seq.NEXTVAL ;
INSERT INTO questions(id, value) VALUES(l_parent_question_id, p_question);
l_child_question_id := my_seq.NEXTVAL ;
INSERT INTO DEPENDENCIES(parent_question_id, child_question_id)
VALUES (l_parent_question_id, l_child_question_id);
END ;
关于Oracle 序列 nextval 和 currval 令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148996/