Isso requer uma asserção, que é definida no padrão SQL, mas não implementada no Oracle. (Embora existam movimentos para serem introduzidos ).
O que você pode fazer é usar uma visão materializada para aplicá-la de forma transparente.
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
/
A magia é:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Essa restrição de verificação impedirá que a visão materializada seja atualizada se a contagem de projetos para um gerente exceder três, cuja falha fará com que a inserção ou atualização de acionamento falhe. É certo que não é elegante.
Como o mview é atualizado no commit (ou seja, transacionalmente), você precisará criar um log no
project
tabela:create materialized view log on project