sql - 在 Oracle 中生成唯一和连续数字的最佳方法

标签 sql oracle plsql

我需要生成 唯一且连续的 数字(用于发票),以快速可靠的方式。我目前使用的是 Oracle 序列,但在某些情况下,生成的数字是 不连续 因为可能会发生异常。
我想了几个解决方案来解决这个问题,但都没有让我信服。你推荐什么解决方案?

  • 使用选择最大值 ()
     SELECT MAX (NVL (doc_num, 0)) +1 FROM invoices
    
  • 使用表格存储为发票生成的最后一个数字。
     UPDATE docs_numbers
         SET last_invoice = last_invoice + 1
    
  • 另一个解决方案?
  • 最佳答案

  • 在并发的环境中,选项 1 总是可以以某种方式失败
    用户。
  • 选项 2 可行,但会限制可扩展性——Tom Kyte 必须的
    引用:
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1508205334476

  • 正如他所建议的,您应该真正审查“无间隙”要求的必要性。

    关于sql - 在 Oracle 中生成唯一和连续数字的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986064/

    相关文章:

    mysql - 使用sql更新表中的列

    php - 在 SQL 查询中计算时间

    oracle - “SET FOREIGN_KEY_CHECKS = 0;”相当于Oracle

    sql - SQL 脚本中的条件

    oracle - 使用 Type 作为过程的输出参数

    sql - 根据 oracle apex 中的条件更改穿梭机的文本颜色

    mysql - 加快数据插入速度

    mysql - 触发以跟踪 MySQL 数据库中的更改

    c# - OracleConnection 生命周期 - 最佳实践

    sql - 使用 CLOB 查询的 Oracle RAC 故障转移