[SQL] 오라클 : 기능 인덱스 선택의 고유성
SQL오라클 : 기능 인덱스 선택의 고유성
나는 기록을 유지 관리해야하고 내가 is_deleted 열을 사용하고 있으므로 'Y'또는 'N'을 가질 수있다. 그러나 is_deleted 'N'중 하나는 예를 들어 I위한 uniwue 항목 (A, B, C) 복합 열을 가져야한다.
나는 기능을 기반으로 고유 인덱스를 만들기 위해 애 쓰고 있어요 때 나는 오류를 얻고있다.
CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' then (id, name, type) end);
라인 1에 오류 : ORA-00907은 : 오른쪽 괄호 누락
도와주세요.
감사
해결법
-
==============================
1.당신은 같은 것을 필요
당신은 같은 것을 필요
CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END, CASE WHEN is_deleted='N' THEN name ELSE null END, CASE WHEN is_deleted='N' THEN type ELSE null END);
행동에 제약의 예
SQL> create table table1 ( 2 id number, 3 name varchar2(10), 4 type varchar2(10), 5 is_deleted varchar2(1) 6 ); Table created. SQL> CREATE UNIQUE INDEX fn_unique_idx 2 ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END, 3 CASE WHEN is_deleted='N' THEN name ELSE null END, 4 CASE WHEN is_deleted='N' THEN type ELSE null END); Index created. SQL> insert into table1 values( 1, 'Foo', 'Bar', 'N' ); 1 row created. SQL> insert into table1 values( 1, 'Foo', 'Bar', 'Y' ); 1 row created. SQL> insert into table1 values( 1, 'Foo', 'Bar', 'Y' ); 1 row created. SQL> insert into table1 values( 1, 'Foo', 'Bar', 'N' ); insert into table1 values( 1, 'Foo', 'Bar', 'N' ) * ERROR at line 1: ORA-00001: unique constraint (SCOTT.FN_UNIQUE_IDX) violated SQL> insert into table1 values( 1, 'Foo', 'Zee', 'N' ); 1 row created.
-
==============================
2.
CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' then (id||','|| name||','|| type) end);
from https://stackoverflow.com/questions/6702367/oracle-function-based-index-selective-uniqueness by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 포함 된 VARCHAR (MAX) 필드에서 유효하지 않은 XML 문자를 교체 (0) | 2020.06.12 |
---|---|
[SQL] MySQL의보기에서 행 순위 (0) | 2020.06.12 |
[SQL] SQL 그룹으로 각 그룹 상위 N 항목 (0) | 2020.06.11 |
[SQL] 오라클에게 마지막 삽입 IDENTITY 검색 (0) | 2020.06.11 |
[SQL] 엔티티 프레임 워크 6 호출 DB 기능 (0) | 2020.06.11 |