2012-07-05 12 views
7

मैं है एक संग्रहीत प्रक्रिया है, जिसमें अगर मैं एक चर के बिना निम्न क्वेरी लिखते हैं, सब: अच्छी तरह सेसंग्रहित प्रक्रिया, LIMIT अभिव्यक्ति में चर का उपयोग कर

CREATE PROCEDURE `some_proc`() 
BEGIN 
SELECT blabla FROM mytable ORDER BY id LIMIT 3,1 
..... 

काम करता है लेकिन, अगर मैं में शुरू संख्या के रूप में एक चर का उपयोग LIMIT अभिव्यक्ति, मुझे एक त्रुटि मिलती है:

CREATE PROCEDURE `some_proc`() 
BEGIN 
DECLARE start INT; 
SET start = 3; 
SELECT blabla FROM mytable ORDER BY id LIMIT start,1 
..... 

क्या संग्रहीत प्रक्रिया के अंदर LIMIT अभिव्यक्ति में चर का उपयोग करने का कोई तरीका है?

+0

[MySQL sproc के लिए मानकों के रूप में LIMIT गुजर] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql:

प्रलेखन से

-sproc) – Pang

उत्तर

17

आप सीधे एक चर का उपयोग नहीं कर सकते हैं। एक अच्छा वैकल्पिक हल है कि मैंने देखा है है -

CREATE PROCEDURE `some_proc` (
IN _START INTEGER, 
IN _LIMIT INTEGER 
) 
BEGIN 
PREPARE STMT FROM 
" SELECT * FROM products LIMIT ?,? "; 
SET @START = _START; 
SET @LIMIT = _LIMIT; 
EXECUTE STMT USING @START, @LIMIT; 
DEALLOCATE PREPARE STMT; 
END $$ 

एक और खोज लौटे इस - http://bugs.mysql.com/bug.php?id=8094

इसके अलावा आप manual में तैयार बयानों के बारे में अधिक पढ़ सकते हैं।

7

आप इसे MySQL 5.5 - SELECT statement में कर सकते हैं।

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.

संबंधित मुद्दे