반응형
Oracle에서 고유 인덱스를 생성하면서 null을 무시하려면 어떻게 해야 합니까?
테이블의 두 필드에 고유한 제약 조건을 작성하려고 합니다.그러나 하나가 null일 가능성이 높습니다.둘 다 null이 아닌 경우에만 고유해야 합니다(namenull이 될 수 없습니다.
create unique index "name_and_email" on user(name, email);
테이블 및 필드 이름의 의미를 무시하고, 그것이 말이 되는지 여부를 무시하십시오. - 저는 방금 몇 가지를 지어냈습니다.
이러한 필드에 null이 아닌 두 값에 대해 고유성을 적용하지만 다음과 같은 여러 항목이 있는 경우 무시하는 고유 제약 조건을 만들 수 있는 방법이 있습니까?namenull이 아닙니다.emailnull입니까?
이 질문은 SQL Server에 대한 것으로, 답이 동일하지 않기를 바랍니다.null도 허용하는 고유 제약 조건을 만들려면 어떻게 해야 합니까?
기능 기반 인덱스를 사용하여 이 작업을 수행할 수 있습니다.다음은 다음을 사용합니다.NVL2()식이 null이 아닌 경우 하나의 값을 반환하고 null인 경우 다른 값을 반환합니다.사용할 수 있습니다.CASE()대신.
SQL> create table blah (name varchar2(10), email varchar2(20))
2 /
Table created.
SQL> create unique index blah_uidx on blah
2 (nvl2(email, name, null), nvl2(name, email, null))
3 /
Index created.
SQL> insert into blah values ('APC', null)
2 /
1 row created.
SQL> insert into blah values ('APC', null)
2 /
1 row created.
SQL> insert into blah values (null, 'apc@example.com')
2 /
1 row created.
SQL> insert into blah values (null, 'apc@example.com')
2 /
1 row created.
SQL> insert into blah values ('APC', 'apc@example.com')
2 /
1 row created.
SQL> insert into blah values ('APC', 'apc@example.com')
2 /
insert into blah values ('APC', 'apc@example.com')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.BLAH_UIDX) violated
SQL>
편집
시나리오에서는 항상 이름이 채워지므로 다음과 같은 인덱스만 필요합니다.
SQL> create unique index blah_uidx on blah
2 (nvl2(email, name, null), email)
3 /
Index created.
SQL>
아직도 얼마나 많은 사람들이 이 대답을 듣는지 모르겠지만, 적어도 최신 버전의 오라클에서는 고유 인덱스에 null을 가진 행을 여러 개 가질 수 있으며 수락된 대답은 필요하지 않습니다.
언급URL : https://stackoverflow.com/questions/1374737/how-can-i-create-a-unique-index-in-oracle-but-ignore-nulls
반응형
'programing' 카테고리의 다른 글
| sql에서 열 아래의 열 합계 가져오기 (0) | 2023.06.13 |
|---|---|
| sqlalchemy flush()를 입력하고 ID를 입력하시겠습니까? (0) | 2023.06.13 |
| 문자열 배열의 값 일치 (0) | 2023.06.13 |
| 목표 C(iPhone)의 Excel 파일에서 데이터 읽기 (0) | 2023.06.13 |
| OS 독립 경로 'META-INF/LICENSE'에서 두 개 이상의 파일이 발견되었습니다. (0) | 2023.06.13 |