Oracle
 sql >> Database >  >> RDS >> Oracle

Consenti di aggiungere solo 3 righe a una tabella per un valore specifico

Ciò richiede un'asserzione, che è definita nello standard SQL ma non implementata in Oracle. (Anche se ci sono mosse per presentarle ).

Quello che puoi fare è utilizzare una vista materializzata per applicarla in modo trasparente.

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 è:

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

Questo vincolo di controllo impedirà l'aggiornamento della vista materializzata se il numero di progetti per un manager supera tre, l'errore causerà il fallimento dell'inserimento o dell'aggiornamento di attivazione. Certo non è elegante.

Poiché mview viene aggiornato su commit (cioè transazionale) dovrai creare un log su project tabella:

create materialized view log on project