एक अतिरिक्त बिट जिससे मुझे समस्याएं आईं।
मैं क्वेरी के नाम से तालिका में नाम और फ़ील्ड को गतिशील रूप से सेट करना चाहता था क्योंकि मैं पूछता हूं, लेकिन मैं क्वेरी के भीतर उस क्वेरी का परिणाम @a
में संग्रहीत करना चाहता था।
@a
को concat
में अक्षर को डालने के बजाय, आपको इसे स्ट्रिंग टेक्स्ट के हिस्से के रूप में शामिल करने की आवश्यकता है। @sql_text2
उपयोग @a
में एक वास्तविक चर के रूप में
') INTO @a FROM '
तब:
delimiter //
CREATE PROCEDURE removeProcessed(table_name VARCHAR(255), keyField VARCHAR(255), maxId INT, num_rows INT)
BEGIN
SET @table_name = table_name;
SET @keyField = keyField;
SET @maxId = maxId;
SET @num_rows = num_rows;
SET @sql_text1 = concat('SELECT MIN(',@keyField,') INTO @a FROM ',@table_name);
PREPARE stmt1 FROM @sql_text1;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
loop_label: LOOP
SET @sql_text2 = concat('SELECT ',@keyField,' INTO @z FROM ',@table_name,' WHERE ',@keyField,' >= ',@a,' ORDER BY ',@keyField,' LIMIT ',@num_rows,',1');
PREPARE stmt2 FROM @sql_text2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
...Additional looping code...
END LOOP;
END
//
delimiter ;
तो @sql_text1
में क्वेरी का परिणाम @a
को स्ट्रिंग के भीतर का उपयोग कर आवंटित
,' WHERE ',@keyField,' >= ',
@a ,' ORDER BY '
वाह, क्या एक ब्रिल विशाल रास्ता! –