web-dev-qa-db-fra.com

Erreur MySQL: vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser à proximité.

J'ai la procédure stockée comme ceci:

CREATE PROCEDURE ProG()
  BEGIN
    SELECT * FROM `hs_hr_employee_leave_quota`;
  END

Mais cela donne l'erreur:

#1064 - Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de '' à la ligne 3 

Qu'est-ce que l'erreur signifie? Quel est le problème avec la ligne numéro 2?

27
Gnanendra

Vous devez modifier le délimiteur avant d'utiliser des déclencheurs, des procédures stockées, etc.

delimiter //
create procedure ProG() 
begin 
SELECT * FROM hs_hr_employee_leave_quota;
end;//
delimiter ;
53
Nicola Cossu

Comment savoir ce que cette erreur MySQL essaie de dire:

#1064 - You have an error in your SQL syntax;

Cette erreur ne contient aucun indice. Vous devez revérifier tous ces éléments pour voir où est votre erreur:

  1. Vous avez omis ou inclus un symbole inutile: !@#$%^&*()-_=+[]{}\|;:'",<>/?
  2. Un mot clé égaré, manquant ou inutile: select, into ou d'innombrables autres. 
  3. Vous avez des caractères unicode qui ressemblent à des caractères ascii dans votre requête mais qui ne sont pas reconnus.
  4. Espaces ou nouvelles lignes mal placées, manquantes ou inutiles entre les mots clés. 
  5. Guillemets simples, doubles guillemets, parenthèses ou accolades sans correspondance. 

Enlevez le plus possible la requête brisée jusqu'à ce qu'elle commence à fonctionner. Ensuite, utilisez la prochaine fois que PostgreSQL dispose d’un système de génération de rapports de syntaxe rationnelle.

12
Eric Leschinski

Délimiteurs, délimiteurs ...

Vous avez vraiment besoin d'eux lorsqu'il y a plusieurs déclarations dans votre procédure. (en d'autres termes, avez-vous un ; dans votre code, puis plusieurs instructions/commandes? Vous devez ensuite utiliser des délimiteurs).

Pour une procédure aussi simple que la vôtre, vous pouvez simplement faire:

CREATE PROCEDURE ProG()
  SELECT * FROM `hs_hr_employee_leave_quota`;
5
ypercubeᵀᴹ

Cela pourrait être un problème de mémoire sur mysql .___. Essayer d'augmenter max_allowed_packet dans my.ini

0
sherin.k