Oracle
 sql >> база данни >  >> RDS >> Oracle

Разрешете само 3 реда да бъдат добавени към таблица за конкретна стойност

Това изисква твърдение, което е дефинирано в SQL стандарта, но не е внедрено в Oracle. (Въпреки че има ходове за въвеждането им ).

Това, което можете да направите, е да използвате материализиран изглед, за да го наложите прозрачно.

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
/

Магията е:

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

Това ограничение за проверка ще попречи на материализирания изглед да бъде обновен, ако броят на проектите за мениджър надвиши три, което неуспех ще доведе до неуспех на задействащото вмъкване или актуализация. Вярно е, че не е елегантно.

Тъй като mview се опреснява при извършване (т.е. транзакционно), ще трябва да изградите лог на project таблица:

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. Първи две заплати във всеки отдел

  2. Qt приложение се срива при използване на ODBC драйвер (macOS)

  3. java.lang.ArrayIndexOutOfBoundsException в oracle.jdbc.driver.T4CTTIrxd.readBitVector(T4CTTIrxd.java:135)

  4. Как трябва да сменя своя sql, за да получа това, което искам в този случай?

  5. Свързване на SQL разработчик към Oracle 12c