Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

erro de delimitador mysql


Eu removeria o ponto e vírgula após END .
    ...
END
|
DELIMITER ;

No seu comentário, você não pode usar o delimitador atual ao declarar um novo delimitador. Isso parece confuso, mas considere se você fizer isso:
DELIMITER |;

Agora o MySQL pensaria que o delimitador é "|;" (dois caracteres, uma barra vertical e um ponto e vírgula). Se você pensar sobre isso, DELIMITER deve ser tratado de forma especial pelo cliente MySQL. É a única afirmação que não pode ser seguido pelo delimitador atual.

Então, ao configurar o delimitador para pipe, faça o seguinte:
DELIMITER |

Ao configurá-lo de volta para ponto e vírgula, faça o seguinte:
DELIMITER ;

FWIW, executei o seguinte sem erro no meu banco de dados de teste local no MySQL 5.0.75:
DROP FUNCTION IF EXISTS PersonName;
DELIMITER |

CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
  DECLARE pname CHAR(20) DEFAULT '';
  SELECT name INTO pname FROM family WHERE ID=personID;
  RETURN pname;
END
|
DELIMITER ;