sql >> Databáze >  >> RDS >> Oracle

Povolit přidání pouze 3 řádků do tabulky pro konkrétní hodnotu

To vyžaduje aserci, která je definována ve standardu SQL, ale není implementována v Oracle. (I když existují pohnutky k jejich zavedení ).

Co můžete udělat, je použít materializovaný pohled k jeho transparentnímu vynucení.

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
/

Kouzlo je:

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

Toto kontrolní omezení zabrání obnovení materializovaného pohledu, pokud počet projektů pro manažera překročí tři, což způsobí selhání spouštěcího vložení nebo aktualizace. Je pravda, že to není elegantní.

Protože se mview obnovuje při odevzdání (tj. transakční), budete muset vytvořit protokol na project tabulka:

create materialized view log on project


  1. Jak vytvořím dočasnou tabulku pro řazení stejného sloupce podle dvou kritérií pomocí ORM společnosti Django?

  2. Base64 jako metoda dezinfekce uživatelského vstupu pro Mysql

  3. Jak mohu vidět TRANSACTION_REPEATABLE_READ v akci s JDBC / MySQL?

  4. Ukládání jednoduchých uvozovek do proměnné varchar SQL Server 2008