Có thể thực thi điều này bằng cách kết hợp giữa chế độ xem hiện thực hóa (MV) và ràng buộc đối với MV như tôi đã mô tả tại đây trong blog của tôi .
Ý tưởng sẽ là tạo ra một MV chỉ có các ngoại lệ đối với quy tắc và sau đó có một ràng buộc luôn không thành công khi một hàng được nhập vào MV. Một cái gì đó như thế này:
create materialized view check_mv
refresh complete on commit as
select 1 dummy
from catalogue c1, catalogue c2
where c1.next_id = c2.previous_id and c1.parent_id != c2.parent_id
alter table check_mv
add constraint check_mv_chk
check (1=0) deferrable;