6

鉴于以下示例表结构,有没有办法添加到唯一约束以确保 (GUID, 'Y') 组合的唯一性?

应用程序逻辑 - 更新guid生成具有相同guid但新的新版本luid;和以前的不活动('Y'->'N')

GUID - 外部 ID
LUID - 内部 ID

 create table id_active(
    "GUID" RAW(16) NOT NULL,
    "LUID" RAW(16) NOT NULL,
    "IS_ACTIVE" char(1) NOT NULL CHECK ( "IS_ACTIVE" IN ('Y', 'N')),
 PRIMARY KEY ("GUID", "LUID"),
 --unique constraint goes here
4

1 回答 1

11

您可以创建一个唯一的基于函数的索引,并利用 Oracle 不在 b-tree 索引中索引 NULL 值这一事实。

CREATE UNIQUE INDEX one_active_guid
    ON table_name( (CASE WHEN is_active = 'Y'
                         THEN guid
                         ELSE null
                      END) );
于 2011-07-12T17:00:16.163 回答