Question

Espérons que cela est une belle un rapide à résoudre.

Voici mon fichier sql:

USE my_db;

DELIMITER $$
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT)
BEGIN
  SELECT DISTINCT `suburb`, `postcode`
  FROM `location`
  WHERE `suburb` LIKE '%argQuery%'
  OR `postcode` LIKE 'argQuery%'
  LIMIT argLimit
  ;
END
$$
DELIMITER ;

Ceci est la sortie:

ERROR 1064 (42000) at line 4: 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 'argLimit
  ;
END' at line 8

Il semble donc ne pas aimer mon paramètre argLimit, mais je ne peux pas comprendre pourquoi. Je dois faire quelque chose de stupide.

J'utilise MySQL 5.0.51.

Merci.

Était-ce utile?

La solution

LIMIT doit être une constante et ne peut pas être paramétrés dans une procédure ou une fonction MySQL. Cependant, il est possible de contourner ce problème en utilisant le PREPARE ... EXECUTE ... USING syntaxe.

Il pourrait finir par un peu comme ceci:

...
SET @qry= argQuery;
SET @lmt= argLimit;

PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?';
EXECUTE stmt USING @qry, @qry, @lmt;
DEALLOCATE PREPARE stmt;

Autres conseils

Le lien direct vers le commentaires de Marc Grue .

Trick pour ce faire : Obtenez l'ID de table du commentaire et de créer un point d'ancrage dans l'URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top