如果我从一个应用程序的 Oracle 序列中获取 currval 而另一个应用程序同时插入会发生啥?
Posted
技术标签:
【中文标题】如果我从一个应用程序的 Oracle 序列中获取 currval 而另一个应用程序同时插入会发生啥?【英文标题】:What happens if I get currval from a sequence in Oracle from one application while another application is inserting at the same time?如果我从一个应用程序的 Oracle 序列中获取 currval 而另一个应用程序同时插入会发生什么? 【发布时间】:2016-03-21 21:05:16 【问题描述】:假设我有一个正在插入表格的应用程序 (App1),我想从序列中获取 currval
-和-
同时,另一个应用程序 (App2) 从 App1 插入到我当前正在使用的同一个表中。我的currval线程安全吗?我会在 App1 中获得插入的 currval,还是可能会给我从 App2 中插入的 currval?
【问题讨论】:
【参考方案1】:currval
被定义为返回提供给会话的序列的最后一个值。每个会话都会有一个不同的currval
。获取序列的nextval
的不同会话对会话的currval
没有影响。同样的道理,你的会话的currval
并没有告诉你如果不同的会话请求nextval
会得到什么。
【讨论】:
是否有一些文档说明了这一点,或者您只是从经验中知道这一点? @BrianTHannan - 你可以从这里开始docs.oracle.com/cd/B19306_01/server.102/b14200/…currval
只有在当前会话中调用了nextval
后才对会话有效,并且序列被多个会话访问没有锁定的并发意味着其余的行为。以上是关于如果我从一个应用程序的 Oracle 序列中获取 currval 而另一个应用程序同时插入会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章