一个非常奇怪的违反唯一性约束的问题:
我在一个表中用下面的语句进行update时报违反唯一性约束的错误,如下
update yield.at_lotcalendar set enddate=to_date('24-12-2006 23:59:59','DD-MM-YYYY HH24:MI:SS') where AT_LOTCALENDARNAME='0651'
错误信息:
ORA-00001: unique constraint (YIELD.AT_LOTCALENDAR1) violated
奇怪就奇怪在这个字段不是主键,也没有唯一性约束,而所报的YIELD.AT_LOTCALENDAR1也只是一个非unique的index,表和索引的代码如下:
CREATE TABLE AT_LOTCALENDAR
(
CDOTYPEID NUMBER(10),
AT_LOTCALENDARID CHAR(16 BYTE) DEFAULT '0' NOT NULL,
CHANGECOUNT NUMBER(10),
CHANGEHISTORYID CHAR(16 BYTE),
DESCRIPTION VARCHAR2(255 BYTE),
ICONID NUMBER(10),
ISFROZEN NUMBER(10),
AT_LOTCALENDARNAME VARCHAR2(50 BYTE),
CUSTOMERID CHAR(16 BYTE),
STARTDATE DATE,
ENDDATE DATE,
LYEAR NUMBER(10),
WEEK NUMBER(10)
)
TABLESPACE YIELD
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 80K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCACHE
NOPARALLEL;
CREATE INDEX AT_LOTCALENDAR1 ON AT_LOTCALENDAR
(STARTDATE, ENDDATE)
NOLOGGING
TABLESPACE YIELD
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;
后来将59秒改成58秒就OK。