Pretendo que toda vez que inserir uma informação na tabela, ele verifique nos registros se já existe um valor igual ao do insert e altere ele.
Para isso tentei fazer um TRIGGER, mas não consigo informar ao UPDATE o código do registro para ele alterar.
CREATETRIGGERremove_posicaoBEFOREINSERTONnewsFOREACHROWBEGIN//aqui eu procuro saber se o valor do campo passado pelo INSERT já existe.IFEXISTS(selectcod_noticias,posicaofromnewswhereposicao=NEW.posicao)THEN//não consigo pegar o valor da select acima para fazer update em determinado registro.UPDATEnewsSETposicao='5'wherecod_noticias=??????????END
CREATE TRIGGER remove_posicao
BEFORE INSERT ON news
FOR EACH ROW
BEGIN
UPDATE news SET posicao = '5' where cod_noticias = (select cod_noticias from news where posicao = NEW.posicao)
END
M
mdbatera
Não rodou não, deu o erro:
#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 ‘END’ at line 9
A
Alberes
Eu acho que isso funciona, cria uma variável e usa a palavrinha máqica INTO.
#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 'INTO cod_noti from news where posicao = NEW.posicao)
THEN' at line 11
M
mdbatera
Eu consegui eliminar os erros, mas ele não está modificando a posicao não, é como se o comando update estivesse lá mas não funciona.
Só para constar, cheguei ao mesmo erro 1442 com o seguinte trigger:
CREATE TRIGGER remove_posicao BEFORE INSERT ON news
FOR EACH ROW
BEGIN
UPDATE news SET posicao = '5' where posicao = new.posicao ;
END
Eu não conhecia essa limitação do MySQL!
Se descobrir uma solução conte pra nós!
Boa sorte!
M
mdbatera
É jamirdeajr ,
Realmente parece que não tem jeito mesmo!
Pensei em usar o Postgres, mas não gosto muito.
Vou ter que implementar no php mesmo.
Mas se eu souber de algo eu coloco aqui.
Valeu Mesmo!!!
V
ViniGodoy
Ao postar tópicos ou títulos de tópicos, por favor, DESLIGUE O CAPS LOCK.
G
Gianetti
No MS SQL Server vc tem as tabelas INSERTED e DELETED, uso as duas para pegar valores que estão sendo inseridos ou atualizados, verifique se no MYSQL tem alguma coisa do genêro, espero ter ajudado.