Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bisakah saya memiliki batasan pada jumlah nilai yang berbeda dalam kolom dalam SQL?

Ini tidak dapat dilakukan menggunakan batasan pemeriksaan saja, tetapi ada cara menggunakan tampilan terwujud dan batasan pemeriksaan seperti yang saya tunjukkan di sini di blog saya . Untuk contoh Anda, ini akan menjadi:

create materialized view emp_dep_mv
build immediate
refresh complete on commit as
select emp_id, count(*) cnt
from relatives
group by emp_id;

alter table emp_dep_mv
add constraint emp_dep_mv_chk
check (cnt <= 3)
deferrable;

Namun, pendekatan ini mungkin tidak berkinerja baik dalam database produksi yang besar dan sibuk, dalam hal ini Anda dapat menggunakan pendekatan yang menggunakan pemicu dan batasan pemeriksaan, ditambah kolom tambahan pada tabel karyawan:

alter table employees add num_relatives number(1,0) default 0 not null;

-- Populate for existing data
update employees
set num_relatives = (select count(*) from relatives r
                     where r.emp_id = e.emp_id)
where exists (select * from relatives r
              where r.emp_id = e.emp_id);

alter table employees add constraint emp_relatives_chk
check (num_relatives <= 3);

create trigger relatives_trg
after insert or update or delete on relatives
for each row
begin
   if inserting or updating then
      update employees
      set    num_relatives = num_relatives + 1
      where  emp_id = :new.emp_id;
   end if;
   if deleting or updating then
      update employees
      set    num_relatives = num_relatives - 1
      where  emp_id = :old.emp_id;
   end if;
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengunggah file oracle dump ke database oracle:AWS RDS

  2. Konversi basis PL/SQL tanpa fungsi

  3. ATAN2() Fungsi di Oracle

  4. Dalam kasus apa Oracle akan membuat indeks secara otomatis?

  5. cx oracle ImportError