【问题标题】:Oracle Sequence Coupled with Manual InsertionOracle 序列与手动插入相结合
【发布时间】:2016-11-28 22:59:23
【问题描述】:

在 Oracle 中,如果我创建一个带有 ID 字段的表,并为该字段创建一个序列对象,以自动递增 1 并从 1 开始。

IE:ID:1、2、3、4、5、6等...

那么对于表的第一条记录,我手动做了一个插入,IE:

insert into table(ID, etc...) values (1, etc...)

如果序列对象用于下一次插入,序列对象是否会自动跳到下一个可用 ID (2)?

【问题讨论】:

  • 简单的答案是否定的。序列无论如何都不会绑定到表格。它们是两个独立的对象,旨在结合使用。如果您需要这种故障转移,您的应用程序将需要处理主键违规并请求新值。否则,请始终使用序列。
  • 使用触发器强制使用序列,并忽略插入中提供的值。
  • 谢谢你们。这很有帮助。

标签: database oracle insert sequence


【解决方案1】:

迁移数据时经常会发现此要求。您迁移没有序列生成的文档编号的数据。迁移后,您使用序列生成文档/行号。为避免冲突,请为序列使用数字范围,这与您的迁移数字范围不同。

【讨论】:

    【解决方案2】:

    您可以创建一个触发器来自动增加您的序列值。

    CREATE OR REPLACE TRIGGER <tgr_name>
    BEFORE INSERT ON <table> 
    FOR EACH ROW
    
    BEGIN
      SELECT seq_name.NEXTVAL
      INTO   :new.id
      FROM   dual;
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2021-08-27
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多