Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Permitir que apenas 3 linhas sejam adicionadas a uma tabela para um valor específico


Isso requer uma asserção, que é definida no padrão SQL, mas não implementada no Oracle. (Embora existam movimentos para serem introduzidos ).

O que você pode fazer é usar uma visão materializada para aplicá-la de forma 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
/

A magia é:
alter table project_manager
   add constraint project_manager_limit_ck check 
       ( no_of_projects <= 3 )
/

Essa restrição de verificação impedirá que a visão materializada seja atualizada se a contagem de projetos para um gerente exceder três, cuja falha fará com que a inserção ou atualização de acionamento falhe. É certo que não é elegante.

Como o mview é atualizado no commit (ou seja, transacionalmente), você precisará criar um log no project tabela:
create materialized view log on project