在两个varchar字段上创建Unqiue不区分大小写的约束

Ste*_*sen 9 sql oracle10g unique-constraint

在Oracle 10g中,如何在两个varchar字段上添加唯一的不区分大小写的约束?例如,给定表中已有​​的以下记录:

"Stephen", "Swensen"
"John", "Smith"
Run Code Online (Sandbox Code Playgroud)

以下插入无效:

"stephen", "Swensen"
"John", "smith"
"stephen", "swensen"
Run Code Online (Sandbox Code Playgroud)

但是以下插入是有效的:

"Stephen", "Smith"
"John", "Swensen"
Run Code Online (Sandbox Code Playgroud)

pri*_*srb 8

我已经设法让它工作:

CREATE UNIQUE INDEX person_name_upper ON person(
    UPPER(first_name), UPPER(last_name));
Run Code Online (Sandbox Code Playgroud)


Mic*_*eyn 6

假设您的表名为person,并且名字和姓氏列名为first_namelast_name,请添加以下唯一约束:

ALTER TABLE person ADD CONSTRAINT person_name_unique
    UNIQUE(LOWER(first_name),LOWER(last_name));
Run Code Online (Sandbox Code Playgroud)

如果我正确理解您的问题并对您的表格布局做出正确的假设,请告诉我.

  • LOWER(COL_NAME)在UNIQUE中无效.给出错误SQL错误:ORA-00904 ::无效的标识符 (3认同)
  • 我不认为`LOWER`属于这样的约束.最好指定排序规则. (2认同)