sql >> Database >  >> RDS >> Oracle

Toestaan ​​dat slechts 3 rijen worden toegevoegd aan een tabel voor een specifieke waarde

Dit vereist een bewering, die is gedefinieerd in de SQL-standaard, maar niet is geïmplementeerd in Oracle. (Hoewel er motieven zijn om ze te introduceren ).

Wat u kunt doen, is een gematerialiseerde weergave gebruiken om deze transparant af te dwingen.

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
/

De magie is:

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

Deze controlebeperking voorkomt dat de gerealiseerde weergave wordt vernieuwd als het aantal projecten voor een manager de drie overschrijdt, wat ertoe leidt dat de triggerende invoeging of update mislukt. Toegegeven, het is niet elegant.

Omdat de mview wordt vernieuwd bij commit (d.w.z. transactioneel) moet je een log maken op project tafel:

create materialized view log on project


  1. Retour-ID als een rij bestaat, anders INSERT

  2. Hoe het my sql-resultaat als variabele naar de controller in codeigniter te sturen?

  3. MySql Selecteer waar en C#

  4. Update dezelfde rij meerdere keren