PREPARED STATEMENT से डायनामिक LIMIT
MySQL स्टोर्ड प्रोसीजर में वेरिएबल को LIMIT क्लॉज में सीधे उपयोग नहीं कर सकते। PREPARED STATEMENT का उपयोग करें।
टेबल और डेटा (14 पंक्तियाँ)
mysql> create table LimitWithStoredProcedure (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(10)
-> );
-- 14 नाम डाले गए: John, Chris, Maxwell, Bob, David, Carol, James, Jace, Robert, Mike, Sam, Peter, Ramit, Tony
स्टोर्ड प्रोसीजर: डायनामिक LIMIT
mysql> DELIMITER //
mysql> CREATE PROCEDURE Sp_limit(IN beg INTEGER, IN end INTEGER)
-> BEGIN
-> PREPARE myStatement FROM "SELECT * FROM LimitWithStoredProcedure LIMIT ?, ?";
-> SET @beginning = beg;
-> SET @ending = end;
-> EXECUTE myStatement USING @beginning, @ending;
-> DEALLOCATE PREPARE myStatement;
-> END //
Query OK, 0 rows affected (0.25 sec)
mysql> DELIMITER ;
प्रोसीजर कॉल: OFFSET 4, LIMIT 7
mysql> CALL Sp_limit(4, 7);
परिणाम (5वीं से 11वीं पंक्ति = 7 पंक्तियाँ)
+----+--------+ | Id | Name | +----+--------+ | 5 | David | | 6 | Carol | | 7 | James | | 8 | Jace | | 9 | Robert | | 10 | Mike | | 11 | Sam | +----+--------+ 7 rows in set
मुख्य बिंदु
PREPAREसे SQL स्टेटमेंट तैयार करें (?प्लेसहोल्डर)SET @var = valueसे वेरिएबल सेट करेंEXECUTE ... USING @var1, @var2से निष्पादित करेंDEALLOCATE PREPAREसे स्टेटमेंट मुक्त करेंLIMIT offset, count- पहला पैरामीटर ऑफसेट, दूसरा पंक्ति गिनती
नोट
MySQL 8.0+ में सीधे वेरिएबल LIMIT @offset, @count काम नहीं करता, PREPARED स्टेटमेंट आवश्यक है।