Oracle
 sql >> Base de données >  >> RDS >> Oracle

Autoriser l'ajout de seulement 3 lignes à un tableau pour une valeur spécifique

Cela nécessite une assertion, qui est définie dans le standard SQL mais non implémentée dans Oracle. (Bien qu'il existe des mouvements pour les introduire ).

Ce que vous pouvez faire, c'est utiliser une vue matérialisée pour l'appliquer de manière 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 magie est :

alter table project_manager
   add constraint project_manager_limit_ck check 
       ( no_of_projects <= 3 )
/

Cette contrainte de vérification empêchera l'actualisation de la vue matérialisée si le nombre de projets pour un gestionnaire dépasse trois, ce qui entraînera l'échec de l'insertion ou de la mise à jour de déclenchement. C'est vrai que ce n'est pas élégant.

Étant donné que le mview est actualisé lors de la validation (c'est-à-dire de manière transactionnelle), vous devrez créer un journal sur project tableau :

create materialized view log on project