Esto requiere una aserción, que se define en el estándar SQL pero no se implementa en Oracle. (Aunque hay movimientos para introducirlos ).
Lo que puede hacer es usar una vista materializada para aplicarla de manera 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
/
La magia es:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Esta restricción de verificación evitará que la vista materializada se actualice si el recuento de proyectos para un administrador supera los tres, cuyo fallo provocará que la inserción o actualización de activación falle. Es cierto que no es elegante.
Debido a que mview se actualiza al confirmar (es decir, transaccionalmente), deberá crear un inicio de sesión en project
tabla:
create materialized view log on project