TRIGGER trigger_horario_atendimento
BEFORE INSERT OR UPDATE
ON atendimento
FOR EACH ROW
DECLARE
funcionario_erro EXCEPTION;
v_id_funcionario NUMBER;
v_data_atendimento TIMESTAMP(6);
v_hora_chegada TIMESTAMP(6);
v_hora_saida TIMESTAMP(6);
v_nome_funcionario VARCHAR2(30);
BEGIN
v_id_funcionario := :NEW.id_funcionario;
v_data_atendimento := :NEW.data_atendimento;
SELECT hora_chegada, hora_saida, nome
INTO v_hora_chegada, v_hora_saida, v_nome_funcionario
FROM funcionario
WHERE id = v_id_funcionario;
IF (to_char(v_hora_chegada, 'HH24:MI') > to_char(v_data_atendimento, 'HH24:MI')) OR (to_char(v_hora_saida, 'HH24:MI') < to_char(v_data_atendimento, 'HH24:MI')) THEN
RAISE funcionario_erro;
END IF;
EXCEPTION
WHEN funcionario_erro THEN RAISE_APPLICATION_ERROR(-20123, 'O funcionario ' || v_nome_funcionario || ' nao pode atender no momento!');
END trigger_horario_atendimento; |