Ini membutuhkan pernyataan, yang didefinisikan dalam standar SQL tetapi tidak diimplementasikan di Oracle. (Meskipun ada langkah untuk memperkenalkannya ).
Yang dapat Anda lakukan adalah menggunakan tampilan terwujud untuk menegakkannya secara transparan.
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
/
Keajaibannya adalah:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Batasan pemeriksaan ini akan mencegah tampilan yang terwujud di-refresh jika jumlah proyek untuk seorang manajer melebihi tiga, yang kegagalannya akan menyebabkan penyisipan pemicu atau pembaruan gagal. Diakui itu tidak elegan.
Karena mview di-refresh saat komit (yaitu secara transaksional), Anda perlu membuat log di project
tabel:
create materialized view log on project