sql >> Base de Datos >  >> RDS >> Oracle

Permita que solo se agreguen 3 filas a una tabla para un valor específico

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