Dit vereist een bewering, die is gedefinieerd in de SQL-standaard, maar niet is geïmplementeerd in Oracle. (Hoewel er motieven zijn om ze te introduceren ).
Wat u kunt doen, is een gematerialiseerde weergave gebruiken om deze transparant af te dwingen.
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
/
De magie is:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Deze controlebeperking voorkomt dat de gerealiseerde weergave wordt vernieuwd als het aantal projecten voor een manager de drie overschrijdt, wat ertoe leidt dat de triggerende invoeging of update mislukt. Toegegeven, het is niet elegant.
Omdat de mview wordt vernieuwd bij commit (d.w.z. transactioneel) moet je een log maken op project
tafel:
create materialized view log on project