首页 > 解决方案 > 更改 Oracle 序列对现有数据的影响,特别是“START WITH”值

问题描述

我处于使用 Oracle 数据库的情况。我们数据库中的一个表不完整,另一个分支正在 Excel 电子表格中跟踪他们的数据。在重新格式化他们的数据后,我能够成功地将数据附加到 Oracle 表中。为了实现这一点,我必须采取的步骤之一是手动分配新的 DISPOSAL_ID(这个特定表的主键)。我的方法是简单地为该表取 DISPOSAL_ID 的最大值,并为我希望附加的每条新记录加一。

现在的问题是,最终用户报告她尝试将新记录输入到该表中,她收到来自 Oracle APEX 应用程序的错误消息:ORA - 00001:违反了唯一约束 (table_name.PK)。

我怀疑这与为该表生成主键的 Oracle 序列产生的值有关,这些值是我在将分支数据附加到表时手动分配的。

我应该怎么做才能更新以更新序列?当前序列定义为:CREATE SEQUENCE "MP_DISPOSAL_EVENTS_SEQ1" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 861 CACHE 20 NOORDER NOCYCLE NOPARTITION /

如果我将 'START WITH' 值替换为 DISPOSAL_ID 的新最大值,这会解决问题吗?对现有数据有影响吗?对于这个问题的新手性质,我深表歉意,但我对此相对较新,并且没有任何技术人员可以为我提供支持。我提前感谢大家。

标签: oracleoracle-apex

解决方案


您无法alter sequence更改起始值。您可以使用新的起始值删除并重新创建序列。这样做的主要缺点是,如果序列上有任何授权,这些授权将丢失并且需要重新授权。

通常最好更改增量,获取nextval序列的,然后将增量设置回 1。因此,例如,如果您向表中添加了 150 个新行

alter sequence MP_DISPOSAL_EVENTS_SEQ1 increment by 150;
select MP_DISPOSAL_EVENTS_SEQ1.nextval from dual
alter sequence MP_DISPOSAL_EVENTS_SEQ1 increment by 1;

推荐阅读