Oracle11g Oracle SQL--不区分大小写的主键

Oracle11g Oracle SQL--不区分大小写的主键,oracle11g,primary-key,case-insensitive,Oracle11g,Primary Key,Case Insensitive,我在Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产环境下遇到以下问题 下面的代码在表USER1的主键(ID)[VARCHAR2]上创建一个唯一索引。它工作正常 CREATE UNIQUE INDEX USER1_PK ON USER1 (ID) COMPUTE STATISTICS LOGGING TABLESPACE ACT_INDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORA

我在Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产环境下遇到以下问题

下面的代码在表USER1的主键(ID)[VARCHAR2]上创建一个唯一索引。它工作正常

CREATE UNIQUE INDEX USER1_PK ON USER1
(ID)
COMPUTE STATISTICS
LOGGING
TABLESPACE ACT_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          128K
            NEXT             128K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE USER1 ADD (
  CONSTRAINT USER1_PK
  PRIMARY KEY
  (ID)
  ENABLE VALIDATE);
紧急需求要求主键(ID)值不区分大小写(例如,aa-aaa-aaaa、aa-aaa-aaaa、aa-aaa-aaa等视为相同)

但是,当我通过将(ID)更改为下面的上限((ID))来更改代码时,Oracle在创建约束时抛出一个SQL错误“ORA-14196:指定的索引不能用于强制约束”。如何修改我的代码以提供所需的功能而不引发错误。我无法更改表架构。多谢各位

CREATE UNIQUE INDEX USER1_PK ON USER1
UPPER((ID))
COMPUTE STATISTICS
LOGGING
TABLESPACE ACT_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          128K
            NEXT             128K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE USER1 ADD (
  CONSTRAINT USER1_PK
  PRIMARY KEY
  (ID)
  ENABLE VALIDATE);

对于这些情况,虚拟列是一个方便的(11g+)功能

alter table user1
add (
    uppercase_id generated always as (upper(id))
);
现在你们都为成功做好了准备

alter table user1
add constraint user1_pk
    primary key (uppercase_id)
    COMPUTE STATISTICS
    TABLESPACE ACT_INDX
;

对于这些情况,虚拟列是一个方便的(11g+)功能

alter table user1
add (
    uppercase_id generated always as (upper(id))
);
现在你们都为成功做好了准备

alter table user1
add constraint user1_pk
    primary key (uppercase_id)
    COMPUTE STATISTICS
    TABLESPACE ACT_INDX
;

在dba.stackexchage.com上获得此问题的答案可能会让您更开心在dba.stackexchage.com上获得此问题的答案可能会让您更开心