Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Estou com problemas de erro de sintaxe nessa procedure onde a intenção é receber dois parametros e apenas inserir na tabela de log se não existir nessa mesma tabela de log.
************************************************************************************************************************
CREATE DEFINER = 'root'@'localhost' PROCEDURE spEntidadesBuscar(
IN pOrdem INTEGER(11),
IN pUser INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
IF NOT EXISTS (SELECT * FROM tblentidades_log WHERE ordem_entidade = pOrdem AND ordem_user = pUser)
BEGIN
INSERT INTO tblentidades_log ( Ordem_entidade,Ordem_user) VALUES ( pOrdem,pUser) ;
END
************************************************************************************************************************
Está dando esse erro
Error: Use near 'IF NOT EXISTS (SELECT * FROM tblentidades_log WHERE ordem_entidade = pOrdem AN' at lin9
Infelizmente não funcionou, deu erro de sintaxe de novo
essa tabela tem apenas esses dois campos que sao as duas chaves
Se os dois são chave primária, então não pode haver um registro repetido, é uma situação causada pela PRIMARY KEY e UNIQUE INDEX, mas lembrando, deve ser uma chave composta, englobando as duas colunas.
ok, mas o que devo mudar na sintaxe para que funcione?
com ou sem DELIMITER, não funciona, dá erro de sintaxe
Cara, não sei como poderia resolver, tente jogar o IF pra dentro do BEGIN.
DELIMITER $$
CREATE DEFINER = 'root'@'localhost' PROCEDURE spEntidadesBuscar(
IN pOrdem INTEGER(11),
IN pUser INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
IF NOT EXISTS (SELECT * FROM `tblentidades_log` WHERE ordem_entidade = pOrdem AND ordem_user = pUser) THEN
INSERT INTO `tblentidades_log` ( Ordem_entidade,Ordem_user) VALUES ( pOrdem,pUser) ;
END IF;
END $$
DELIMITER ;
Tente alterar o DELIMITER pra poder utilizar queries dentro da procedure, como é explicado neste link.
DELIMITER $$
CREATE DEFINER = 'root'@'localhost' PROCEDURE
spEntidadesBuscar(IN pOrdem INTEGER(11),
IN pUser INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
IF NOT EXISTS (SELECT * FROM
tblentidades_logWHERE ordem_entidade = pOrdem AND ordem_user = pUser)BEGIN
INSERT INTO
tblentidades_log( Ordem_entidade,Ordem_user) VALUES ( pOrdem,pUser) ;END $$
DELIMITER ;
Mas, qual é a PRIMARY KEY desta tabela? Se a PK desta tabela não for os dois campos, também existe a opção de criar outra chave composta, pra trabalhar como UNIQUE INDEX. (Como eu gosto de links, hehe)
Ah, não se esqueça de voltar o DELIMITER para ;