TEXT
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;