उपयोगकर्ता-परिभाषित वेरिएबल (@var), CONCAT, PREPARE, और EXECUTE का उपयोग करके डायनामिक रूप से SQL बनाएं और निष्पादित करें।
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable(FirstName,LastName) VALUES('John','Smith'),('David','Miller'),('John','Doe'),('Chris','Brown');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | John | Smith |
| 2 | David | Miller |
| 3 | John | Doe |
| 4 | Chris | Brown |
+----+-----------+----------+
वेरिएबल के साथ डायनामिक क्वेरी
mysql> SET @yourTableName := 'DemoTable';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @query := CONCAT('SELECT `LastName` FROM ', @yourTableName, ' WHERE Id=3');
Query OK, 0 rows affected (0.00 sec)
mysql> PREPARE myStatement FROM @query;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE myStatement;
परिणाम:
+----------+
| LastName |
+----------+
| Doe |
+----------+
1 row in set (0.00 sec)
नोट: यह डायनामिक SQL (रनटाइम पर निर्मित) को दर्शाता है। PREPARE पार्स/ऑप्टिमाइज़ करता है; EXECUTE चलाता है। मानों के लिए (पहचानकर्ता नहीं) प्लेसहोल्डर ? के साथ PREPARE ... FROM 'SELECT * FROM t WHERE id=?' और EXECUTE stmt USING @id; का उपयोग करें। DEALLOCATE PREPARE के साथ साफ करें।