SQL Oracle constraint value unique among multiple columns SQL Oracle constraint value unique among multiple columns oracle oracle

SQL Oracle constraint value unique among multiple columns


CREATE MATERIALIZED VIEW mv_myBUILD IMMEDIATEREFRESH FAST ON COMMIT ASSELECT DISTINCT    CASE         WHEN t2.Employee_Number IS NOT NULL THEN 1        WHEN t3.Employee_Number IS NOT NULL THEN 1        WHEN t4.Employee_Number IS NOT NULL THEN 1        ELSE 0    END AS wrongFROM table t1    LEFT JOIN table t2 ON t2.MobileNo = t1.LandlineNo AND t2.Employee_Number != t1.Employee_Number    LEFT JOIN table t3 ON t3.VOIP = t1.LandlineNo AND t3.Employee_Number != t1.Employee_Number    LEFT JOIN table t4 ON t4.VOIP = t1.MobileNo AND t4.Employee_Number != t1.Employee_Number/ALTER TABLE mv_my ADD CHECK(wrong = 0)/

It may or may not work depending on your oracle version (doc)


create table table1(   a varchar2(20) not null,   b varchar2(20) not null,   c varchar2(20) not null)/create table ctrs (   val varchar2(20) unique,   ctr_a int,   ctr_b int,   ctr_c int,   check(ctr_a*ctr_b+ctr_a*ctr_c+ctr_b*ctr_c=0))/create trigger table1_trg before insert or update or delete on table1for each rowbegin   if deleting then       update ctrs set ctr_a = ctr_a - 1 where val = :old.a;      update ctrs set ctr_b = ctr_b - 1 where val = :old.b;      update ctrs set ctr_c = ctr_c - 1 where val = :old.c;   elsif inserting then      merge into ctrs using (        select :new.a as x from dual union all        select :new.b as x from dual union all        select :new.c as x from dual      )      on (val = x)      when not matched then          insert (val, ctr_a, ctr_b, ctr_c) values (x, 0, 0, 0);      update ctrs set ctr_a = ctr_a + 1 where val = :new.a;      update ctrs set ctr_b = ctr_b + 1 where val = :new.b;      update ctrs set ctr_c = ctr_c + 1 where val = :new.c;   else      update ctrs set ctr_a = ctr_a - 1 where val = :old.a;      update ctrs set ctr_b = ctr_b - 1 where val = :old.b;      update ctrs set ctr_c = ctr_c - 1 where val = :old.c;      merge into ctrs using (        select :new.a as x from dual union all        select :new.b as x from dual union all        select :new.c as x from dual      )      on (val = x)      when not matched then          insert (val, ctr_a, ctr_b, ctr_c) values (x, 0, 0, 0);      update ctrs set ctr_a = ctr_a + 1 where val = :new.a;      update ctrs set ctr_b = ctr_b + 1 where val = :new.b;      update ctrs set ctr_c = ctr_c + 1 where val = :new.c;   end if;end;/

fiddle