Ir para conteúdo

POWERED BY:

Arquivado

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

Sames Davis

Erro de sintaxe IF NOT EXISTS

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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_log` WHERE 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 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;

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.