Ir para conteúdo

Arquivado

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

arena

Erro de função mysql Error #1064

Recommended Posts

Bom dia! Já tentei de tudo! mas não encontrei qual o erro do código abaixo, alguém pode ajudar?

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 '' at line 3

CREATE FUNCTION registro_prateleira(usuario integer) returns integer
begin
declare ret integer DEFAULT 0;
if((select `registro_prateleira` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario) is null) then
       insert into `prateleiras_codigo` (`cod_usuario`, `registro_prateleiras`) values(usuario,1)
       set ret=1;
     ELSE 
    update `prateleiras_codigo` set `registro_prateleiras` = `registro_prateleiras`+1 where `cod_usuario`=usuario
    return (select `registro_prateleiras` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario)

 end if; 
 return ret;
 end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Notei que está utilizando o ";", certifique-se de, antes de criar a function com mais de uma query, esteja utilizando "DELIMITER ||", e após o fim da criação voltar o DELIMITER para "DELIMITER ;".

 

Exemplo:

DELIMITER ||
# Ao fazer isso, o banco entende que "||" determina o fim da execução da Query
# Isso evita que ocorra o erro, mas após voltar para ";" a execução ocorre normalmente

CREATE FUNCTION registro_prateleira(usuario integer) returns integer
begin
declare ret integer DEFAULT 0;
if((select `registro_prateleira` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario) is null) then
       insert into `prateleiras_codigo` (`cod_usuario`, `registro_prateleiras`) values(usuario,1)
       set ret=1;
     ELSE 
    update `prateleiras_codigo` set `registro_prateleiras` = `registro_prateleiras`+1 where `cod_usuario`=usuario
    return (select `registro_prateleiras` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario)

 end if; 
 return ret;
 end;

DELIMITER ; # Volta para o normal

Não é obrigatório que seja "||", mas é uma sugestão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua dando erro

    DELIMITER ||
    CREATE FUNCTION registro_prateleira(usuario integer)
    returns integer
    begin
    declare ret integer DEFAULT 0;
    if((select `registro_prateleira` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario) is null) 
    then
          insert into `prateleiras_codigo` (`cod_usuario`, `registro_prateleiras`) values(usuario,1);
           set ret=1;
         ELSE
       			  update `prateleiras_codigo` set `registro_prateleiras` = `registro_prateleiras`+1 where `cod_usuario`=usuario;
        set ret = select `registro_prateleiras` from `prateleiras_codigo` as `pc` where `pc.cod_usuario` = usuario;
     end if; 
     return ret;
     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.