programing

오라클 데이터베이스의 고유한 대/소문자 구분 안 함 제약 조건

megabox 2023. 8. 27. 09:03
반응형

오라클 데이터베이스의 고유한 대/소문자 구분 안 함 제약 조건

나는 있습니다varcharURL 값에 대한 내 표의 열입니다.저는 사건에 민감하지 않게 기록을 통해 그것을 독특하게 만들어야 합니다.나는 그것을 달성하기 위한 두 가지 방법을 찾았습니다.

  1. 필드에 고유 인덱스를 만듭니다.

    create unique index <index_name> on <tablename>(lower(<column_name>))
    
  2. 필드에 다음과 같은 고유 제약 조건 추가

    ALTER TABLE person ADD CONSTRAINT person_name_unique
    UNIQUE(LOWER(first_name),LOWER(last_name));
    

위의 선택 중에서 효율적으로 채택할 수 있는 방법은 무엇입니까?

더 효율적인 접근법이 첫 번째 접근법입니다.하지만 후자의 구문이 작동하지 않기 때문에 더 효율적입니다.그러나 고유 인덱스를 만들 수 있는 것과 같은 방식으로 함수 기반 제약 조건을 만들 수는 없습니다.

고유한 제약 조건이 작동하지 않음

SQL> create table person (
  2    first_name varchar2(10),
  3    last_name  varchar2(10)
  4  );

Table created.

SQL> ALTER TABLE person ADD CONSTRAINT person_name_unique
  2  UNIQUE(LOWER(first_name),LOWER(last_name));
UNIQUE(LOWER(first_name),LOWER(last_name))
       *
ERROR at line 2:
ORA-00904: : invalid identifier

그러나 고유한 기능 기반 인덱스는 작동합니다.

SQL> create unique index idx_uniq_name
  2      on person( lower(first_name), lower(last_name) );

Index created.
  • 1은 가능하며 중복에 대한 오류를 제공합니다.
  • 2를 사용할 수 없습니다. (제약 조건에서 함수를 사용할 수 없습니다.)

언급URL : https://stackoverflow.com/questions/27032735/unique-case-insensitive-constraint-in-oracle-database

반응형