sql >> Databasteknik >  >> RDS >> Oracle

Tillåt endast 3 rader att läggas till i en tabell för ett specifikt värde

Detta kräver ett påstående, som är definierat i SQL-standarden men inte implementerat i Oracle. (Även om det finns åtgärder för att få dem införda ).

Vad du kan göra är att använda en materialiserad vy för att genomdriva den på ett transparent sätt.

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
/

Magin är:

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

Denna kontrollbegränsning kommer att förhindra att den materialiserade vyn uppdateras om antalet projekt för en chef överstiger tre, vilket misslyckande kommer att göra att den utlösande infogningen eller uppdateringen misslyckas. Visserligen är det inte elegant.

Eftersom mview uppdateras vid commit (dvs transaktionsmässigt) måste du bygga en inloggning på project tabell:

create materialized view log on project


  1. Hur ökar man automatiskt i PostgreSQL?

  2. I SQL Server 2008 kan jag skicka tabellvärderade parameter till min lagrade procedur från NHibernate. Hur man uppnår detsamma i Oracle

  3. Hur begränsar jag åtkomsten till webbapplikationen till endast en maskin?

  4. Rails "var" för tid mindre än frågor