【发布时间】:2016-09-13 16:49:25
【问题描述】:
我正在使用 Pro*C 开发一个小型应用程序,但我对其中一个主要功能有疑问。
我对每个表的标识符都有一个自动递增触发器,因此在将行插入表之前,触发器会设置行的 id。
这里的问题是我想在一个 isert 之后检索序列的值(以获取插入的行的 id),但是当两个事务试图插入一行时会发生什么?如果我使用 read-commited 级别并在插入行并检索它的值后提交事务会导致任何问题吗?我该怎么办?谢谢!
【问题讨论】:
-
您目前如何获得价值?通过查询
currval(在同一个会话中,即使已提交),使用returning子句或其他方式? -
我通过查询
currval得到插入语句后的值 -
OK,做插入的两个事务在不同的会话中?它们是独立的,
currval是会话本地的。你真的有问题还是只是想知道你所做的是否安全? -
插入将在不同的会话中,我只是想知道什么是安全的方法。但是正如你所说,如果每个会话的值都是独立的,我不会有任何问题,对吧?
-
currval对此非常安全
标签: sql oracle triggers sequence auto-increment