Frage

Hoffentlich ist das ein schönes schnell ein zu lösen.

Hier ist meine SQL-Datei:

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 ;

Dies ist die Ausgabe:

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

So scheint es nicht meine Parameter argLimit mögen, aber ich kann nicht herausfinden, warum. Ich muss etwas zu tun dumm.

Ich bin mit MySQL 5.0.51.

Danke.

War es hilfreich?

Lösung

LIMIT muss eine Konstante sein und kann nicht innerhalb einer Prozedur oder Funktion in MySQL parametrisiert werden. Allerdings ist es möglich, dieses Problem zu umgehen, indem Sie die PREPARE ... EXECUTE ... USING Syntax.

Es könnte etwas wie die am Ende aussehen:

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

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

Andere Tipps

Der direkte Link zu den Marc Grue Kommentare .

Trick diese zu tun: Holen Sie sich die Tisch-ID des Kommentars, und erstellen Sie einen Anker in der URL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top