복붙노트

[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. ==============================

    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. ==============================

    2.

    CREATE UNIQUE INDEX fn_unique_idx ON table1  
        (CASE WHEN is_deleted='N' then (id||','|| name||','|| type) end);
    
  3. from https://stackoverflow.com/questions/6702367/oracle-function-based-index-selective-uniqueness by cc-by-sa and MIT license