【问题标题】:How to resolve com.ibm.websphere.ce.cm.DuplicateKeyException on an identity column如何解决标识列上的 com.ibm.websphere.ce.cm.DuplicateKeyException
【发布时间】:2023-03-28 23:38:01
【问题描述】:

引起:com.ibm.websphere.ce.cm.DuplicateKeyException:INSERT 语句、UPDATE 语句或由 DELETE 语句引起的外键更新中的一个或多个值无效,因为主键、唯一约束或由“1”标识的唯一索引限制表“USER.VLDN_CHK”的索引键值重复。SQLCODE=-803, SQLSTATE=23505, DRIVER=3.65.110

有没有办法找到当前序列值是多少,如何将其设置为不同的值?我正在使用 IBM DB2。

表被创建为:

CREATE TABLE "USER"."VLDN_CHK" ( 
  "VLDN_CHK_ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY 
     ( START WITH 180000 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 
       NO CYCLE CACHE 20 NO ORDER ), 
 "TYPE_NM" VARCHAR(100) NOT NULL, 
 "RSLT_CD" SMALLINT);

【问题讨论】:

    标签: database db2 identity database-sequence


    【解决方案1】:

    检查接下来要分配的值:

    SELECT NEXTCACHEFIRSTVALUE
    FROM SYSCAT.SEQUENCES
    WHERE SEQSCHEMA = 'YOURSCHEMA' AND SEQNAME = 'YOURSEQUENCE'
    

    设置新值

    ALTER SEQUENCE YOURSCHEMA.YOURSEQUENCE RESTART WITH <new value> 
    

    身份列也由序列支持。确定下一个标识值

    SELECT NEXTCACHEFIRSTVALUE
    FROM SYSCAT.COLIDENTATTRIBUTES 
    WHERE TABSCHEMA = 'YOURSCHEMA' AND TABNAME = 'YOURTABLE'
    

    (因为表中只能有一个标识列)。设置新值

    ALTER TABLE YOURSCHEMA.YOURTABLE 
      ALTER COLUMN YOURIDENTITYCOL RESTART WITH <new value>
    

    【讨论】:

    • 我应该提到这一点,但特定表没有序列名称。该表的创建如下 CREATE TABLE "USER"."VLDN_CHK" ("VLDN_CHK_ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 180000 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 NO CYCLE CACHE 20 NO ORDER ), "TYPE_NM" VARCHAR (100)非空,“RSLT_CD”SMALLINT);
    • 只是提醒您正确提问的好处,不是吗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多