УНИКАЛЬНО внутри ограничения CHECK - PullRequest
0 голосов
/ 17 октября 2018

Этот вопрос является новым поворотом IF в проверочном ограничении SQL .Я хочу сделать что-то похожее на следующую проверку (которая выдает исключение 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)) 
    );

Цель - убедиться (на уровне СУБД), что активна только одна строка с тем же объектом.хотя неактивные строки могут дублироваться (историческое представление строк).

Это может быть сделано в триггере, но, кажется, лучше использовать check , как объяснено в UNIQUEограничение против проверки перед INSERT вопрос.

возможно ли это?

1 Ответ

0 голосов
/ 17 октября 2018

Сделайте это с индексом 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)
       ) 

Oracle допускает несколько строк со значениями NULL в уникальном индексе.

...