Ir ao conteúdo

Problema ao criar trigger


Eder Cuer

Posts recomendados

Postado

Eae galera, estou com um problema ao criar uma trigger no MySql.



DELIMITER $$
CREATE TRIGGER InclusaoFuncionario
BEFORE INSERT ON funcionario
FOR EACH ROW

BEGIN
IF new.salariobase is null THEN
SELECT valorsalariominimo INTO new.salariobase
FROM tabelabase;
END IF;

END $$

Aparece o seguinte erro: #1327 - Undeclared variable: new

Postado

Eae Erciley Junior, o erro sumiu.

Estou pegando uma prova que fiz em oracle e passando pra mysql e to apanhando um pouco hehe...

Me fala uma coisa, no mysql eu também consigo fazer exception e exibir mensagens igual no oracle, igual o código abaixo?



CREATE OR REPLACE TRIGGER InclusaoFuncionario
BEFORE INSERT ON Funcionario
FOR EACH ROW
BEGIN
IF (:NEW.SalarioBase IS NULL) THEN
SELECT ValorSalarioMinimo INTO :NEW.SalarioBase
FROM TabelaBase;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20100, 'Tabela base inexistente');
END;


Fui testar a trigger e não funcionou, era pra fazer o seguinte:

"Faça um trigger que ao incluir um funcionário, caso não haja valor para o SalarioBase, busque o valor do salário mínimo na TabelaBase e grave com esse valor."

Postado

Olá Eder. Como assim o erro sumiu? ^^

Quanto ao exception, realmente desconheço no mysql, o que vejo as vezes, não sei se é o certo, é um simples "SELECT 'Tabela base inexistente'".

O que é esse "ValorSalarioMinimo"? É uma variável ou um campo da tabela?

Para resolver essa questão em MySQL, eu faria:

DROP TRIGGER IF EXISTS InclusaoFuncionario;

DELIMITER $$

CREATE TRIGGER InclusaoFuncionario BEFORE INSERT ON Funcionario FOR EACH ROW

BEGIN
DECLARE sal_minimo DOUBLE(06,2);

IF (NEW.SalarioBase IS NULL OR NEW.SalarioBase <= 0) THEN
BEGIN
SET sal_minimo := (SELECT MIN(SalarioBase) FROM Funcionario);

IF (sal_minimo IS NOT NULL AND sal_minimo > 0) THEN
BEGIN
SET NEW.SalarioBase:=sal_minimo;
END;
END IF;
END;
END IF;

END;
$$
DELIMITER ;

Postado

Quis dizer que aquele erro não aparece mais.

Esse valorsalariominimo é um campo da minha tabela.

Eu tenho uma tabela funcionário, onde eu tenho as informações do funcionário e um campo do salário, e tenho uma outra tabela com o valor do salário minimo (tabela salariobase), e nessa trigger, caso um funcionário seja inserido sem o valor do salário ela insere o valor do salario mínimo no campo do salário do funcionário.

Postado

A entendi agora o porque você estava fazendo SELECT INTO New.campo ^^

Se é assim, é só você trocar esta linha da trigger que fiz, buscando essa informação do salário mínimo, aí acho q fica 100%


troque
SET sal_minimo := (SELECT MIN(SalarioBase) FROM Funcionario);

por
SET sal_minimo := (SELECT salarioMinimo FROM tabela);

Bom, espero ter ajudado ^^

  • Moderador
Postado

Caso o autor necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!