Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle - Como aplicar regras em relacionamentos dependendo de registros de atributos (exemplo simples)


Você pode verificar essa restrição em um gatilho após inserção ou atualização na tabela de maldições.
CREATE or replace TRIGGER check_leader
AFTER INSERT OR UPDATE ON  Course
FOR EACH ROW
declare
  v_type varchar2(30);
BEGIN
  select type into v_type from stuff where :NEW.leader_id = stuff.stuff_id;
  if v_type != 'teacher' then 
   RAISE_APPLICATION_ERROR(-20000, 'course leader must be teacher');
  end if;
end;
/

Mas você precisa de outro gatilho na tabela de funcionários. No caso de uma mudança de tipo de material (de professor para faxineiro) Deve-se verificar as entradas na tabela de maldições.
CREATE or replace TRIGGER check_courses
AFTER UPDATE ON  STUFF
FOR EACH ROW
declare
  v_num number;
BEGIN
  if :OLD.type = 'teacher' and :NEW.type != 'teacher' then
     select count(*) into v_num from curses where courses.leader_id = :NEW.stuff_id;
     if v_num > 0 then 
       RAISE_APPLICATION_ERROR(-20000, 'there are courses assigned ');
      end if;
  end if;
end;
/