Dette kræver en påstand, som er defineret i SQL-standarden, men ikke implementeret i Oracle. (Selvom der er tiltag for at få dem introduceret ).
Hvad du kan gøre, er at bruge en materialiseret visning til at håndhæve det gennemsigtigt.
create materialized view project_manager
refresh on commit
as
select Project_manager_employee_id
, count(*) as no_of_projects
from project
group by Project_manager_employee_id
/
Magien er:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Denne kontrolbegrænsning forhindrer, at den materialiserede visning bliver opdateret, hvis antallet af projekter for en leder overstiger tre, hvilken fejl vil medføre, at den udløsende indsættelse eller opdatering mislykkes. Det er ganske vist ikke elegant.
Fordi mview'et opdateres ved commit (dvs. transaktionsmæssigt), skal du bygge et log på project
tabel:
create materialized view log on project