MySQL-এ ইউজার-ডিফাইন্ড ভেরিয়েবল (Session Variable) এবং লোকাল ভেরিয়েবলের পার্থক্য
ইউজার-ডিফাইন্ড ভেরিয়েবল (User-Defined / Session Variable)
- প্রিফিক্স:
@(যেমন@myVar) - সেশন-স্পেসিফিক: একই সেশনে যেকোনো জায়গা থেকে অ্যাক্সেসযোগ্য
- লুজলি টাইপড (Loosely typed)
- সেশন শেষ হলে ধ্বংস হয়
- এক ইউজারের সেশন ভেরিয়েবল অন্য ইউজার দেখে না
- ইনিশিয়ালাইজ:
SET @var = value;বাSELECT @var := value;
লোকাল ভেরিয়েবল (Local Variable)
- প্রিফিক্স নেই
- শুধু স্টোরড প্রসিজার, ফাংশন, ট্রিগার-এর ভেতরে ডিক্লেয়ার করা যায়
DECLAREকীওয়ার্ড দিয়ে ডিক্লেয়ার:DECLARE varName dataType [DEFAULT value];- প্রতিবার প্রসিজার কল হলে নতুন করে ইনিশিয়ালাইজ হয় (DEFAULT মান দিয়ে বা NULL)
- প্রসিজার শেষ হলে ধ্বংস হয়
মূল পার্থক্য
| বিষয় | ইউজার-ডিফাইন্ড (@var) | লোকাল (DECLARE var) |
|---|---|---|
| স্কোপ | পুরো সেশন | শুধু প্রসিজার/ফাংশন ব্লক |
| পুনরায় ইনিশিয়ালাইজেশন | নहीं (মান ধরে রাখে) | প্রতিবার প্রসিজার কল-এ |
| দৃশ্যমানতা | সেশন-স্পেসিফিক | শুধু ব্লক-ভেতর |
| সিনট্যাক্স | @var | var (কোনো @ নেই) |
উদাহরণ: স্টোরড প্রসিজারে উভয় একসাথে
প্রসিজার তৈরি
mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo()
-> BEGIN
-> DECLARE localVariable INT DEFAULT 10;
-> SET localVariable = localVariable + 10;
-> SET @userVariable = @userVariable + 10;
-> SELECT localVariable;
-> SELECT @userVariable;
-> END;
-> //
mysql> DELIMITER ;
ইউজার ভেরিয়েবল ইনিশিয়ালাইজ
mysql> SET @userVariable = 10;
১ম কল
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
+---------------+ +---------------+ | localVariable | | @userVariable | +---------------+ +---------------+ | 20 | | 20 | +---------------+ +---------------+
২য় কল
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
+---------------+ +---------------+ | localVariable | | @userVariable | +---------------+ +---------------+ | 20 | | 30 | +---------------+ +---------------+
৩য় কল
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
+---------------+ +---------------+ | localVariable | | @userVariable | +---------------+ +---------------+ | 20 | | 40 | +---------------+ +---------------+
পরিমাণ: লোকাল ভেরিয়েবল প্রতিবার ১০ থেকে শুরু হয় (DEFAULT 10), কিন্তু ইউজার-ডিফাইন্ড ভেরিয়েবল মান ধরে রাখে (10 → 20 → 30 → 40)।