2017-07-02 68 views
1

我知道在INSERT语句中使用RETURNING,但需要一种方法来使其作为INSERT语句(或包含事务)的结果返回,或者能够检索该值使用SELECT。有没有办法做到这一点?我无法使用DBMS_OUTPUT。谢谢!在Oracle中插入INSERT后选择最后一个ID

回答

2

RETURNING子句是保证的最简单方法获取由INSERT语句生成的ID的值。在多用户环境中查询max(id)是不可靠的,尤其是在您使用RAC的情况下。

select your_sequence.currval from dual; 

这意味着你需要知道的名字:

如果ID是从一个序列填充您可以在同一会话的INSERT运行此得到序列的当前值如果您使用12c标识列,那么序列并不总是显而易见的。

基本上,如果你想ID使用RETURNING。

+0

谢谢,愚蠢的问题在这里...我如何意识到序列? – joelc

+0

这就是业务逻辑。除非您使用Oracle 12c Identity列,否则数据字典在序列和主键之间没有联系。你需要检查你的应用程序逻辑--PL/SQL API,触发器等。[这个答案可能会给你一个出发点](https://stackoverflow.com/a/2363311/146325) – APC

+0

@APC你没有'不要提到来自DUAL的查询可能会返回INSERT未使用的值(例如,并发进程执行类似的操作)。所需要的是两个并发进程从序列中获取nextval。我同意你的最终陈述,但是你并没有把并发问题挂起。 – jeff6times7