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.
CREATE TRIGGER remove_posicao
BEFORE INSERT ON news
FOR EACH ROW
BEGIN
//aqui eu procuro saber se o valor do campo passado pelo INSERT já existe.
IF EXISTS(select cod_noticias, posicao from news where posicao = NEW.posicao)
THEN
//não consigo pegar o valor da select acima para fazer update em determinado registro.
UPDATE news SET posicao = '5' where cod_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
#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
#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)
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.
BEGIN
DECLARE cod_noti INT DEFAULT 0;
DECLARE po INT DEFAULT 0;
SET po = 5;
select cod_noticias INTO cod_noti from news where posicao = NEW.posicao;
IF cod_noti = NEW.posicao
THEN
UPDATE news SET posicao = po where cod_noticias = cod_noti;
END IF;
END
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!
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.
– ==============================================================================
– Se for INSERT
– ==============================================================================
IF EXISTS (SELECT * FROM INSERTED) AND NOT EXISTS (SELECT * FROM DELETED)
BEGIN
SET @VARIAVEL = (SELECT VARIAVEL FROM INSERTED);
END
OBS.: CapsLock usado por ser mais legivel para o SGDB.
by DBA.