Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Zulassen, dass einer Tabelle für einen bestimmten Wert nur 3 Zeilen hinzugefügt werden

Dazu ist eine Assertion erforderlich, die im SQL-Standard definiert, aber in Oracle nicht implementiert ist. (Obwohl es Bemühungen gibt, sie einzuführen ).

Was Sie tun können, ist eine materialisierte Ansicht zu verwenden, um sie transparent durchzusetzen.

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
/

Die Magie ist:

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

Diese Prüfungseinschränkung verhindert, dass die materialisierte Ansicht aktualisiert wird, wenn die Anzahl der Projekte für einen Manager drei überschreitet, was dazu führt, dass die auslösende Einfügung oder Aktualisierung fehlschlägt. Zugegeben, es ist nicht elegant.

Da die mview beim Festschreiben (d. h. transaktional) aktualisiert wird, müssen Sie ein Protokoll für project erstellen Tabelle:

create materialized view log on project