gpt4 book ai didi

Oracle 序列 nextval 和 currval 令人困惑

转载 作者:行者123 更新时间:2023-12-03 20:29:27 25 4
gpt4 key购买 nike

在我的程序中,我写了这个

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为什么以这种方式检索序列值?

最佳答案

如果您有三个单独的陈述:

  • nextval
  • 电流
  • 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 ;

    关于Oracle 序列 nextval 和 currval 令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148996/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com