【问题标题】:SELECT the last ID after INSERT in Oracle在Oracle中选择INSERT后的最后一个ID
【发布时间】:2017-07-02 14:15:18
【问题描述】:

我知道在 INSERT 语句中使用 RETURNING,但需要一种方法使其作为 INSERT 语句(或封闭事务)的结果返回,或者能够使用 SELECT 检索该值。有没有办法做到这一点?我不能使用 DBMS_OUTPUT。谢谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

    如果 ID 是从序列中填充的,您可以通过在与 INSERT 相同的会话中运行此 来获取序列的当前值:

     select your_sequence.currval from dual;
    

    这意味着您需要知道序列的名称,这并不总是显而易见的,如果您使用 12c 标识列,则更是如此。

    基本上,如果您想要 ID,请使用 RETURNING。

    【讨论】:

    • 谢谢,这是个愚蠢的问题……我如何才能知道顺序?
    • 这是业务逻辑。除非您使用 Oracle 12c 标识列,否则数据字典中的序列和主键之间没有联系。您需要检查您的应用程序逻辑 - PL/SQL API、触发器等。This answer might give you a starting point
    • @APC 您没有提到来自 DUAL 的查询可能会返回他的 INSERT 未使用的值(例如,执行类似操作的并发进程)。只需要两个并发进程从序列中获取下一个值。我同意你的最后陈述,但你没有解决并发问题。
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多