Fórum Triggers em SQL #606929
05/12/2019
0
estou fazendo um trabalho de BD para a faculdade e estou com dificuldades em fazer dois triggers funcionar. Não é nada complicado, mas não sei se estou errando na sintaxe ou na própria query. Se alguém puder me ajudar, agradeço.
1. Trigger 1
É um banco de dados para uma clínica médica. Preciso garantir que (a) uma recepcionista ou uma enfermeira não seja simultaneamente um médico e (b) um médico não seja simultaneamente um médico trainee ou qualquer outro funcionário.
As tabelas pertinentes são:
empregado (id, nome) enfermeira(id) // id é chave estrangeira que referencia id empregado recepcionista (id) //id é chave estrangeira que referencia id empregado medico_permanente (id) //id é chave estrangeira que referencia id empregado medico_trainee (id) //id é chave estrangeira que referencia id empregado
Fiz da seguinte forma este trigger:
(a)
CREATE TRIGGER verifica_EnfermeiraRecepcionista ON medico_permanente
FOR INSERT, UPDATE
AS
BEGIN
IF (NEW.id = enfermeira.id) OR (NEW.id = recepcionista.id) THEN
RAISERROR ('Esta é uma enfermeira ou recepcionista, não um médico!');
RETURN
END (b)
CREATE TRIGGER verifica_MedicoPermanente ON medico_trainee, enfermeira, recepcionista
FOR INSERT, UPDATE
AS
BEGIN
IF (NEW.id= medico_trainee.id) OR (NEW.id= enfermeira.id) OR (NEW.id = recepcionista.id) THEN
RAISERROR ('Este é um médico permanente!');
RETURN;
END2. Trigger 2
Triggers para assegurar que diferentes indivíduos (médicos ou clientes) não tenham o mesmo número de telefone.
As tabelas pertinentes são:
client (id, nome)
numero_fone_cliente (id, telefone) // id é chave estrangeira que referencia id da tabela client
numero_fone_empregado (id, telefone) // id é chave estrangeira que referencia id da tabela empregado
Fiz da seguinte forma os dois triggers:
CREATE TRIGGER fone_valido_cliente ON numero_fone_cliente
FOR INSERT, UPDATE
AS
BEGIN
IF ( EXISTS ( SELECT id FROM numero_fone_empregado WHERE fone = NEW.fone)) THEN
RAISERROR (O telefone já existe. Digite outro.');
RETURN;
END
CREATE TRIGGER fone_valido_empregado ON numero_fone_empregado
FOR INSERT, UPDATE
AS
BEGIN
IF ( EXISTS ( SELECT id FROM numero_fone_cliente WHERE fone = NEW.fone))
RAISERROR ('O telefone já existe. Digite outro!');
RETURN;
END
Se alguém tiver alguma dica agradeço.
Daniel
Curtir tópico
+ 0Posts
06/12/2019
Daniel
O trigger, por exemplo 1a, é executado sem erros:
delimiter // CREATE TRIGGER verifica_EnfermeiraRecepcionista BEFORE INSERT ON medico_permanente FOR EACH ROW BEGIN IF (NEW.id= enfermeira.id OR NEW.id= recepcionista.id) THEN SET NEW='Esta é uma enfermeira ou recepcionista!'; END IF; END//
Mas quando tento testá-lo inserindo algum valor na tabela medico_permanente, o sql me retorna com o erro "unknown table enfermeira in field list".
Alguém tem alguma dica?
Gostei + 0
06/12/2019
Emerson Nascimento
para fazer o que você pretende, você precisa buscar o conteúdo nas tabelas auxiliares.
CREATE TRIGGER verifica_EnfermeiraRecepcionista BEFORE INSERT ON medico_permanente
FOR EACH ROW
BEGIN
IF (exists(select e.id from enfermeira e where e.id = NEW.id) OR exists(select r.id from recepcionista r where r.id = NEW.id)) THEN
RAISERROR ('Esta é uma enfermeira ou recepcionista!');
END IF;
END
Gostei + 0
06/12/2019
Daniel
para fazer o que você pretende, você precisa buscar o conteúdo nas tabelas auxiliares.
CREATE TRIGGER verifica_EnfermeiraRecepcionista BEFORE INSERT ON medico_permanente
FOR EACH ROW
BEGIN
IF (exists(select e.id from enfermeira e where e.id = NEW.id) OR exists(select r.id from recepcionista r where r.id = NEW.id)) THEN
RAISERROR ('Esta é uma enfermeira ou recepcionista!');
END IF;
END
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)