在我的程序中,我写这个
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);
Run Code Online (Sandbox Code Playgroud)
假设序列的最后一个值等于1.在这种情况下,我期望这个结果:
my_seq.NEXTVAL = 2;
my_seq.CURRVAL = 2;
my_seq.NEXTVAL = 3;
Run Code Online (Sandbox Code Playgroud)
但它插入了这个:
my_seq.NEXTVAL = 2;
my_seq.CURRVAL = 3;
my_seq.NEXTVAL = 3;
Run Code Online (Sandbox Code Playgroud)
我想知道为什么oracle以这种方式检索序列值?
Chr*_*mer 14
如果你有三个单独的陈述:
NEXTVAL
CURRVAL
NEXTVAL
那你就是对的.但你只有两个
NEXTVAL
currval和nextval
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 ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |