Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zezwalaj na dodanie tylko 3 wierszy do tabeli dla określonej wartości

Wymaga to potwierdzenia, które jest zdefiniowane w standardzie SQL, ale nie jest zaimplementowane w Oracle. (Chociaż istnieją ruchy, które należy wprowadzić ).

To, co możesz zrobić, to użyć zmaterializowanego widoku, aby w przejrzysty sposób go egzekwować.

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
/

Magia to:

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

To ograniczenie sprawdzania zapobiegnie odświeżeniu zmaterializowanego widoku, jeśli liczba projektów dla menedżera przekroczy trzy, co spowoduje niepowodzenie wyzwalania wstawiania lub aktualizacji. Trzeba przyznać, że nie jest elegancki.

Ponieważ mview jest odświeżany przy zatwierdzeniu (tj. transakcyjnie), będziesz musiał zbudować log w project tabela:

create materialized view log on project


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić listę wszystkich tabel używanych w określonej procedurze składowanej w Oracle?

  2. Korzystanie z Oracle i PHP:Działa w SQL Developer, ale wyniki pliku PHP ORA-00900:Nieprawidłowa instrukcja

  3. Oracle:jak WSTAWIĆ, jeśli wiersz nie istnieje

  4. Jak efektywnie załadować DataFrame pandy typu mieszanego do bazy danych Oracle?

  5. NHibernate 3.2 i wyrocznia stronicowania