কোয়েরিতে ব্যবহার করার জন্য কলাম নাম তৈরি করতে ইউজার-ডিফাইন্ড ভেরিয়েবল SET কমান্ডসহ ব্যবহার করতে হয়। সিনট্যাক্স নিচে দেওয়া হলো:
SET @anyVariableName := (
SELECT CONCAT
(
"SELECT",
GROUP_CONCAT(CONCAT("\n 1 as ", COLUMN_NAME) SEPARATOR ','),
"\n FROM DUAL")
FROM INFORMATION_SCHEMA_COLUMNS
WHERE TABLE_NAME= 'yourTableName' );
এখন PREPARE কমান্ড দিয়ে স্টেটমেন্ট প্রিপেয়ার করুন। সিনট্যাক্স নিচে দেওয়া হলো:
PREPARE anyVariableName from @anyVariableName;
EXECUTE কমান্ড দিয়ে স্টেটমেন্ট এক্সিকিউট করুন। সিনট্যাক্স নিচে দেওয়া হলো:
EXECUTE anyVariableName;
DEALLOCATE কমান্ড দিয়ে প্রিপেয়ারড স্টেটমেন্ট ডিঅ্যালোকেট করুন। সিনট্যাক্স নিচে দেওয়া হলো:
DEALLOCATE PREPARE anyVariableName;
এখন দুটি কলামসহ একটি টেবিল তৈরি করা যাক এবং কলামগুলো কনক্যাট কোয়েরিতে ব্যবহার করা যাক। টেবিল তৈরির কোয়েরি:
mysql> create table ConcatenationWithUserDefinedVariable
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> User_Id int,
-> PRIMARY KEY(Id)
-> ); Query OK, 0 rows affected (1.14 sec)
কলাম নামগুলো কোয়েরিতে ব্যবহার করার জন্য উপরের সিনট্যাক্স ব্যবহার করা যাক। কোয়েরিটি হলো:
mysql> set @q := (
-> select concat(
-> "select",
-> group_concat(concat("\n 1 as ", column_name) separator ','),
-> "\nfrom dual")
-> from information_schema.columns
-> where table_name = 'ConcatenationWithUserDefinedVariable'); Query OK, 0 rows affected (0.01 sec)
উপরের ইউজার-ডিফাইন্ড ভেরিয়েবল প্রিপেয়ার করার কোয়েরি:
mysql> prepare stmt from @q; Query OK, 0 rows affected (0.00 sec) Statement prepared
এখন উপরের প্রিপেয়ারড স্টেটমেন্ট এক্সিকিউট করা যাক। কোয়েরিটি হলো:
mysql> execute stmt;
আউটপুট নিচে দেওয়া হলো:
+----+---------+ | Id | User_Id | +----+---------+ | 1 | 1 | +----+---------+ 1 row in set (0.00 sec)
শেষে প্রিপেয়ারড স্টেটমেন্ট ডিঅ্যালোকেট করা যাক। কোয়েরিটি হলো:
mysql> deallocate prepare stmt; Query OK, 0 rows affected (0.00 sec)
ব্যাখ্যা: এই টেকনিকটি ডাইনামিক SQL জেনারেট করতে ব্যবহৃত হয়। INFORMATION_SCHEMA.COLUMNS থেকে কলাম নামগুলো নিয়ে GROUP_CONCAT দিয়ে একটি সিলেক্ট কোয়েরি স্ট্রিং বানানো হয়েছে, যা পরে PREPARE/EXECUTE দিয়ে রান করা হয়েছে। এটি রানটাইমে কলাম ডাইনামিকলি সিলেক্ট করার জন্য কাজে লাগে।