programing

null 값이 가능한 필드에 고유 인덱스를 만드는 방법(Oracle 11g)?

oldcodes 2023. 9. 11. 22:12
반응형

null 값이 가능한 필드에 고유 인덱스를 만드는 방법(Oracle 11g)?

3개의 열(ID, UNIQUE_VALUE, UNIQUE_GROUP_ID)이 있는 샘플 테이블입니다.

나는 아래의 기록들이 허용되기를 원합니다:

(1, NULL, NULL)
(2, NULL, NULL)

아니면

(3, NULL, 7)
(4, 123, 7)

또는 (참고:조건은 nor에서 허용되지 않습니다)

(5, NULL, 7)
(6, NULL, 7)

그리고 이것들은 허용될 수 없습니다.

(7, 123, 7)
(8, 123, 7)

마지막 두 열에 고유한 인덱스를 만들었지만 처음 두 개의 예제만 허용됩니다.

둘 다 null이 아닌 경우에만 db가 이 두 컬럼의 고유성을 확인할 수 있습니까?

두 행 모두에 고유성만 적용하려고 합니다.UNIQUE_VALUE그리고.UNIQUE_GROUP_IDnull이 아닙니다.이렇게 하려면 고유한 함수 기반 인덱스를 사용할 수 있습니다.

CREATE UNIQUE INDEX func_based_index ON the_table
  (CASE WHEN unique_value IS NOT NULL
         AND unique_group_id IS NOT NULL
        THEN UNIQUE_VALUE || ',' || UNIQUE_GROUP_ID
   END);

nvl 함수를 사용하여 null을 피하고 대신 다른 값을 지정할 수 있습니다.

create unique index func_idx on TEST_TABLE (nvl(UNIQUE_VALUE,1), UNIQUE_GROUP_ID);

단점은 인덱스가 더 커지기 때문에 null 값을 검색하려면 table_access_full을 피하기 위해 nvl 함수를 사용해야 합니다.

또한 모든 null 값은 인덱스의 한 가지 가지 아래에 있으므로 히스토그램이 업데이트되었는지 확인합니다.

도움이 되었으면 좋겠습니다 :)

언급URL : https://stackoverflow.com/questions/13042997/how-to-create-unique-index-on-fields-with-possible-null-values-oracle-11g

반응형