Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用触发器插入后读取序列值?_Sql_Oracle_Triggers_Sequence_Auto Increment - Fatal编程技术网

Sql 使用触发器插入后读取序列值?

Sql 使用触发器插入后读取序列值?,sql,oracle,triggers,sequence,auto-increment,Sql,Oracle,Triggers,Sequence,Auto Increment,我正在用Pro*C开发一个小应用程序,但我有一个关于其中一个主要功能的问题 我对每个表的标识符都有一个自动递增触发器,因此在将行插入表之前,触发器设置行的id 这里的问题是,我想在isert之后检索序列的值(以获取插入行的id),但是当两个事务试图插入行时会发生什么?如果我使用readcommitted级别并在插入行并检索其值后提交事务,会导致任何问题吗?我该怎么办?谢谢 两个会话可以独立插入行并参考currval,因为这是会话的本地操作 没有清楚地说明: 。。。对CURRVAL的任何引用都会返

我正在用Pro*C开发一个小应用程序,但我有一个关于其中一个主要功能的问题

我对每个表的标识符都有一个自动递增触发器,因此在将行插入表之前,触发器设置行的id


这里的问题是,我想在isert之后检索序列的值(以获取插入行的id),但是当两个事务试图插入行时会发生什么?如果我使用readcommitted级别并在插入行并检索其值后提交事务,会导致任何问题吗?我该怎么办?谢谢

两个会话可以独立插入行并参考
currval
,因为这是会话的本地操作

没有清楚地说明:

。。。对CURRVAL的任何引用都会返回序列的当前值,即最后一次对NEXTVAL的引用返回的值

在会话中将CURRVAL用于序列之前,必须首先使用NEXTVAL初始化序列

综上所述,它们表明这是安全的,但第一部分并没有明确说明这是当前会话中最后一次提到
NEXTVAL
。然而,它确实说:

序列可以由多个用户同时访问,而无需等待或锁定

但是,您不需要执行查询来获取ID,您可以使用


您目前如何获取该值?通过查询
currval
(在同一个会话中,即使已提交),使用
返回
子句或其他方法?我通过查询
currval
确定来获取insert语句后的值,而执行insert的两个事务在不同的会话中?它们是独立的,
currval
是会话本地的。你真的有问题吗?或者只是想知道你所做的是否安全?插入将在不同的会话中进行,我只是想知道安全的方法是什么。但正如您所说,如果每个会话的值都是独立的,那么我不会有任何问题,对吗?
currval
对此非常安全谢谢您的详细回答。我将在这里使用
returning
子句。我不知道我可以用Pro*C。
insert into your_table (col1, ...) values (:val1, ...)
returning id into :id;