سؤال

نأمل أن هذا هو لطيف واحد لطيف لحل.

هنا هو ملف .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 ;

هذا هو الإخراج:

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

لذلك يبدو أنه ليس مثل المعلمة alglimit، لكن لا يمكنني العمل لماذا. يجب أن أفعل شيئا سخيفا.

أنا أستخدم MySQL 5.0.51.

شكرا.

هل كانت مفيدة؟

المحلول

LIMIT يجب أن يكون ثابتا ولا يمكن تمييزه داخل إجراء أو وظيفة في MySQL. ومع ذلك، من الممكن الحل هذه المشكلة باستخدام PREPARE ... EXECUTE ... USING بناء الجملة.

قد ينتهي الأمر بالنظر إلى حد ما مثل هذا:

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

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

نصائح أخرى

الرابط المباشر إلى تعليقات مارك Grue.

خدعة للقيام بذلك : احصل على معرف الجدول للتعليق وإنشاء مرساة في عنوان URL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top