sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man oracle check-begränsningar för att begränsa antalet registreringar?

Under vissa förhållanden kan du genomdriva tabellbegränsningar med materialiserade vyer :

create table tq84_t (
  user_id   number,
  foo       varchar2(10),
  constraint pk_tq84_t primary key (user_id, foo)
);

create materialized view log on tq84_t;

create materialized view tq84_mv 
 refresh on commit
as
  select user_id, count(*) cnt
    from tq84_t
   group by user_id;

alter table tq84_mv
  add constraint check_max_2_registrations 
  check (cnt < 3);

Med den här materialiserade vyn kontrollerar Oracle begränsningen för den materialiserade vyn när du commit:

insert into tq84_t values (1, 'a');
insert into tq84_t values (1, 'b');

commit;

Det här fungerar. Följande gör det inte:

insert into tq84_t values (1, 'c');

commit;

Det misslyckas med

ORA-12008: error in materialized view refresh path
ORA-02290: check constraint (META.CHECK_MAX_2_REGISTRATIONS) violated


  1. Hur man arbetar med datumfunktioner i Oracle sql

  2. Allvarligt fel:Anrop till en medlemsfunktion FetchRow() på ett icke-objekt

  3. Skicka flera värden i en enda parameter

  4. PGError:ERROR:aggregeringar är inte tillåtna i WHERE-satsen på en AR-fråga för ett objekt och dess has_many-objekt