Ir para conteúdo

POWERED BY:

Arquivado

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

Nilson Lopes

Erro no CREATE TRIGGER

Recommended Posts

Oi Pessoal ! Estou tentano criar um TRIGGER no MySQL mas está dando erro atrás de erro e não consigo entender onde está a falha. A ideia do TRIGGER é EXCLUIR do BD as informações do USUÁRIO do Sistema ( seg_usuarios) sempre que um FUNCIONÁRIO da Empresa for DEMITIDO, ou seja, quando a data de DEMISSÃO do FUNCIONÁRIO for alterada de NULL para uma data válida. O código é o seguinte: CREATE TRIGGER `Teste_Trigger`.`T_exclui_usuario_demitido` AFTER UPDATE on `Teste_Trigger`.`Funcionario` FOR EACH ROW BEGIN DECLARE Funcionario_demitido VARCHAR(11); SET Funcionario_demitido = Funcionario.func_CPF; IF (NEW.Funcionario.func_data_demissao != OLD.Funcionario.func_data_demissao) AND (NEW.Funcionario.func_data_demissao != NULL) THEN DELETE FROM seg_usuarios WHERE (seg_usuarios.func_CPF = Funcionario.demitido); END IF END O erro (no momento) é o seguinte: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(11)' at line 4 Se eu retirar a VARIAVEL que estou criando (Funcionario_demitido), quer dizer, retirar o DECLARE e o SET, passa a dar um novo erro de SINTAXE no comando DELETE. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') THEN DELETE FROM seg_usuarios WHERE (seg_usuarios.func_CPF = Funcio' at line 5 Estou usando o MySQL versão 5.0.37 e o PHPMyAdmin versão 2.10.0.2, ou seja, as versões mais atuais. Agradeceria qualquer ajuda pois esse erro está tirando meu sono e já não sei mais o que tentar para resolvê-lo. Nilson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei uma Trigger com a mesma idéia da sua, dá uma comparada:

#Utilizar com delimitadores evita alguns problemas durante a criação

DELIMITER $$

 

DROP TRIGGER `T_exclui_usuario_demitido`$$

 

CREATE TRIGGER `T_exclui_usuario_demitido` AFTER UPDATE on `funcionario`

FOR EACH ROW BEGIN

#Declaração está OK

DECLARE Funcionario_demitido VARCHAR(11);

#Em trigger não utiliza o nome da tabela em uso, utilize a referencia NEW ou OLD,

#caso esteja se referindo a tabela que ativou a trigger, ou dará erro quando esta trigger

#for executada

SET Funcionario_demitido = NEW.func_cpf;

#Se é apenas para verificar se o novo valor do campo não é nulo,

#pode utilizar o operador IS NOT NULL

IF (NEW.func_data_demissao <> OLD.func_data_demissao) AND (NEW.func_data_demissao IS NOT NULL) THEN

#Utilizar o nome da variável, estava Funcionario.demitido e não Funcionario_demitido

DELETE FROM seg_usuarios WHERE seg_usuarios.func_cpf = Funcionario_demitido;

END IF;

END$$

 

DELIMITER ;

Quando tentei algumas vezes, não consegui criar trigger/function/procedure pelo phpmyadmin de jeito nenhum. Agora utilizo outro programa. Não sei se era a versão que estava utilizando (não lembro qual versão era).

Segue alguns links que até hoje me ajudam ehehehe

http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

http://dev.mysql.com/tech-resources/articl...ql-triggers.pdf

 

Edit: criei esta trigger (e as tabelas com os campos utilizados) com a versão 5.0.27 do mysql, e o SQL Yog, e funfou beleza.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cassitos ! Grande parte de meu problema estava relacionado ao uso do PHPMyAdm in para a criação de TRIGGER. Não sei porque razão a versão mais atual (2.10.0.2) dá vários erros com TRIGGERs que funcionaram em outros softwares para Administração do MySQL, como o SQLyog. Depois de fazer as correções que você sugeriu e a partir do momento em que passei a usar o SQLyog, os erros de sintaxe pararam de ocorrer mas o TRIGGER em si não funcionava. Alterava a data de demissão do Funcionario e seu status para DE e a Tabela seg_usuario não era DELETADA. Depois de parar um pouco para pensar, resolvi verificar se o erro não estava no IF com vários AND. Recriei o TRIGGER para usar uma condição de cada vez e ele passou a funcionar. A única condição que não funciona é aquela em que uso o NEW.xxx e o OLD.xxxx, como a seguir IF (NEW.func_data_demissao != OLD.func_data_demissao) THEN Alguma idéia???? Agradeço a ajuda Nilson

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.