问题描述
你好Oracle大师,
我有一个关于nextval序列的伪柱。
我以为nextval的调用每次都会产生一个新的整数,而currval返回序列的当前值。
在您在livesql链接中看到的脚本中,
事实并非如此: 出乎意料的是,前两名员工的id_1 = id_2。
此外,我在官方文档中进行了搜索,发现这句话:
PL/SQL语言参考 (E50727-04,第6-4页):
PL/SQL evaluates every occurrence of sequence_name.CURRVAL and sequence_name.NEXTVAL
(unlike SQL, which evaluates a sequence expression for every row in
which it appears).
这句话我不清楚。
我的问题:
1) 我的脚本有什么问题?
2) 与PL/SQL语言参考相关: 您能否解释或提供一个示例来说明区别,SQL和PL/SQL如何对待nextval?
非常感谢。
亲切的问候
乔瓦尼
我有一个关于nextval序列的伪柱。
我以为nextval的调用每次都会产生一个新的整数,而currval返回序列的当前值。
在您在livesql链接中看到的脚本中,
事实并非如此: 出乎意料的是,前两名员工的id_1 = id_2。
此外,我在官方文档中进行了搜索,发现这句话:
PL/SQL语言参考 (E50727-04,第6-4页):
PL/SQL evaluates every occurrence of sequence_name.CURRVAL and sequence_name.NEXTVAL
(unlike SQL, which evaluates a sequence expression for every row in
which it appears).
这句话我不清楚。
我的问题:
1) 我的脚本有什么问题?
2) 与PL/SQL语言参考相关: 您能否解释或提供一个示例来说明区别,SQL和PL/SQL如何对待nextval?
非常感谢。
亲切的问候
乔瓦尼
专家解答
感谢您使用LiveSQL-使我们消化问题的工作更加容易。
您的示例实际上是文档的完美示例。(即在SQL中每行执行一次)
注意在你的SQL中你做了:
插入emp_with_double_id值 (my_seq.nextval,my_seq.nextval,'第一雇员');
所以你引用了序列两次,但它只得到评估一次 (即每行一次)。因此你得到了同样的价值。
稍后在您的PL/SQL代码中,我们在每次引用序列 (a,b,c,d) 时都会对序列进行评估 (并递增)。
希望这有所帮助。
您的示例实际上是文档的完美示例。(即在SQL中每行执行一次)
注意在你的SQL中你做了:
插入emp_with_double_id值 (my_seq.nextval,my_seq.nextval,'第一雇员');
所以你引用了序列两次,但它只得到评估一次 (即每行一次)。因此你得到了同样的价值。
稍后在您的PL/SQL代码中,我们在每次引用序列 (a,b,c,d) 时都会对序列进行评估 (并递增)。
希望这有所帮助。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




