CHECK约束内的UNIQUE

JLM*_*JLM 2 sql oracle check-constraints

这个问题是检查约束SQL中一个IF.我想做类似于以下检查的事情(抛出ORA-00936: missing expression异常):

ALTER TABLE t_table
    ADD CONSTRAINT chk_unique_active CHECK
    ( 
        ( tb_active = 0 ) OR  
        ( tb_active = -1 AND UNIQUE(tb_active, tb_img, tb_objid)) 
    );
Run Code Online (Sandbox Code Playgroud)

目标是确保(在DBMS级别)只有一个具有相同objid的行是活动的,尽管可以复制非活动行(行的历史视图).

它可以在触发器中完成,但在INSERT问题之前使用UNIQUE约束与检查中所解释的检查似乎更好.

这可能吗?

Gor*_*off 5

使用unique索引执行此操作:

create unique index unq_table_active 
    on ( (case when tb_active = -1 then tb_img end),
         (case when tb_active = -1 then tb_objid end)
       ) 
Run Code Online (Sandbox Code Playgroud)

Oracle允许多行具有NULL唯一索引中的值.