반응형
Oracle: 함수 기반 인덱스 선택적 고유성
기록을 유지해야 하므로 'Y' 또는 'N'이 될 수 있는 is_deleted 열을 사용하고 있습니다.그러나 is_deleted 'N'의 모든 인스턴스에 대해 (a,b,c) 합성 열에 대한 유니우 항목이 있어야 합니다.
함수 기반 고유 인덱스를 생성하려고 하면 오류가 발생합니다.
CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' then (id, name, type) end);
1행 오류: ORA-00907: 오른쪽 괄호 누락
제발 도와주세요.
감사해요.
당신은 그런 것이 필요할 것입니다.
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.
CREATE UNIQUE INDEX fn_unique_idx ON table1
(CASE WHEN is_deleted='N' then (id||','|| name||','|| type) end);
언급URL : https://stackoverflow.com/questions/6702367/oracle-function-based-index-selective-uniqueness
반응형
'programing' 카테고리의 다른 글
레이아웃이 그려졌을 때 어떻게 알 수 있습니까? (0) | 2023.07.31 |
---|---|
스타일 변경을 전파하기 위해 WebKit에서 다시 그리거나 다시 칠하도록 강제하려면 어떻게 해야 합니까? (0) | 2023.07.31 |
보기에서 열을 삭제하는 방법 (0) | 2023.07.31 |
musl: /usr/bin/ld를 사용하여 MariaDB를 빌드할 때 -lgcc_s를 찾을 수 없습니다. (0) | 2023.07.31 |
Swift에서 REST API 호출 (0) | 2023.07.31 |