Ciò richiede un'asserzione, che è definita nello standard SQL ma non implementata in Oracle. (Anche se ci sono mosse per presentarle ).
Quello che puoi fare è utilizzare una vista materializzata per applicarla in modo trasparente.
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
/
La magia è:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Questo vincolo di controllo impedirà l'aggiornamento della vista materializzata se il numero di progetti per un manager supera tre, l'errore causerà il fallimento dell'inserimento o dell'aggiornamento di attivazione. Certo non è elegante.
Poiché mview viene aggiornato su commit (cioè transazionale) dovrai creare un log su project
tabella:
create materialized view log on project