Я делал что-то подобное в прошлом с целью ограничения диапазона ячеек:
ALTER TABLE "CES"."NS_CES" ADD CONSTRAINT "CHECK_OVER_DIAPAZON" CHECK (
(ID_NS_WORK != 1835 AND ID_NS_WORK != 1833) OR
(ID_NS_WORK = 1835 and PNS BETWEEN 0 AND 100 and QNS BETWEEN -200 AND 10) OR
(ID_NS_WORK = 1833 and PNS BETWEEN 0 AND 100 and QNS BETWEEN -200 AND 10)
);
Но теперь у меня другая задача: добавить ограничение, которое будет проверять, что результат запроса не возвращает никакого значения.
Это мой выбор, который не должен возвращать значения и который я хочу создать в качестве контрольного ограничения для таблицы Training_rule:
select type, training_list_id, element_id, request_code
from training_rule
where after_rule is null and after_group is null
group by type, training_list_id, element_id, request_code
having count(*) > 1;
Что-то вроде этого:
ALTER TABLE "CES"."TRAINING_RULE" ADD CONSTRAINT "CHEK_SELECT_HAS_NO_RESULT" CHECK (
^HAS NO RESULT^:
[
select type, training_list_id, element_id, request_code
from training_rule
where after_rule is null and after_group is null
group by type, training_list_id, element_id, request_code
having count(*) > 1;
]
)
Спасибо
Изменить 1
Это работает благодаря Гордону Линоффу.
create unique index idx_trainingrule_4 on TRAINING_RULE (
type, training_list_id, element_id, request_code,
(case when after_rule is null and after_group is null then null
else name
end)
);