暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 了解SQL和PL/SQL中序列的nextval行为

askTom 2017-02-26
834

问题描述

你好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?

非常感谢。

亲切的问候
乔瓦尼

专家解答

感谢您使用LiveSQL-使我们消化问题的工作更加容易。

您的示例实际上是文档的完美示例。(即在SQL中每行执行一次)

注意在你的SQL中你做了:

插入emp_with_double_id值 (my_seq.nextval,my_seq.nextval,'第一雇员');

所以你引用了序列两次,但它只得到评估一次 (即每行一次)。因此你得到了同样的价值。

稍后在您的PL/SQL代码中,我们在每次引用序列 (a,b,c,d) 时都会对序列进行评估 (并递增)。

希望这有所帮助。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论