उपयोगकर्ता परिभाषित चर को सत्र-विशिष्ट चर के रूप में भी जाना जाता है। यह एक प्रकार का शिथिल रूप से टाइप किया गया वैरिएबल है जिसे सत्र में कहीं भी आरंभ किया जा सकता है और इसमें सत्र समाप्त होने तक उपयोगकर्ता परिभाषित चर का मान होता है।
उपयोगकर्ता परिभाषित चर @ प्रतीक के साथ उपसर्ग है। उदाहरण के लिए:
@anyVariableName;
दो दृष्टिकोण हैं जिनके द्वारा आप उपयोगकर्ता द्वारा परिभाषित चर को प्रारंभ कर सकते हैं। आप SET कमांड का उपयोग कर सकते हैं या SELECT क्वेरी का उपयोग कर सकते हैं। पहला तरीका इस प्रकार है:
सेट @anyVariableName=anyValue;
दूसरा तरीका इस प्रकार है:
चुनें @anyVariableName :=anyValue;
यदि आप SELECT क्वेरी में कोलन (:) का उपयोग नहीं करते हैं तो यह इसे अभिव्यक्ति के रूप में मूल्यांकन करता है। परिणाम या तो सही होगा या गलत:
mysql> @m=10 चुनें;
निम्न आउटपुट है:
<पूर्व>+----------+| @एम=10 |+----------+| 1 |+----------+1 पंक्ति सेट में (0.00 सेकंड)स्थानीय चर का उपयोग संग्रहीत प्रक्रिया, कार्य आदि में किया जा सकता है। इसका उपयोग DECLARE कीवर्ड के साथ किया जाता है। उपयोगकर्ता द्वारा परिभाषित चर जैसे @ उपसर्ग की आवश्यकता नहीं है।
वाक्य रचना स्थानीय चर के लिए इस प्रकार है।
अपना वैरिएबलनाम डेटा टाइप घोषित करें;
नोट :स्थानीय चर और उपयोगकर्ता-परिभाषित चर के बीच मुख्य अंतर यह है कि जब भी सत्र-विशिष्ट चर या उपयोगकर्ता-परिभाषित चर को NULL के साथ पुन:प्रारंभ नहीं किया जाता है, तो स्थानीय चर को हर बार NULL मान के साथ पुन:प्रारंभ किया जाता है। एक उपयोगकर्ता द्वारा निर्धारित एक उपयोगकर्ता-परिभाषित चर अन्य उपयोगकर्ता द्वारा नहीं देखा जा सकता है। किसी उपयोगकर्ता के बाहर निकलने पर किसी दिए गए उपयोगकर्ता के लिए जो भी सत्र चर स्वचालित रूप से नष्ट हो जाता है।
यहां संग्रहीत कार्यविधि के साथ सत्र-विशिष्ट चर और स्थानीय चर का डेमो दिया गया है। स्थानीय चर और उपयोगकर्ता-परिभाषित चर के साथ संग्रहीत कार्यविधि बनाने की क्वेरी इस प्रकार है:
mysql> DELIMITER //mysql> क्रिएट प्रोसीजर sp_LocalAndUserDefinedVariableDemo() -> BEGIN -> DECLARE localVariable int default 10; -> स्थानीय वैरिएबल सेट करें =स्थानीय वैरिएबल + 10; -> सेट @userVariable=@userVariable+10; -> स्थानीय चर चुनें; -> @userVariable चुनें; -> अंत; -> // क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित हुई हैं (0.39 सेकंड)mysql> DELIMITER;
अब उपयोगकर्ता द्वारा परिभाषित चर के लिए मान सेट करें। क्वेरी इस प्रकार है:
mysql> SET @userVariable=10;क्वेरी ठीक, 0 पंक्तियाँ प्रभावित (0.00 सेकंड)
अब संग्रहीत प्रक्रिया को कॉल करें। पहली कॉल में, उपयोगकर्ता द्वारा परिभाषित चर 10+10=20 होगा जबकि स्थानीय चर 10+10=20 होगा।
कॉल कमांड का उपयोग करके संग्रहीत कार्यविधि को कॉल करें:
mysql> कॉल करें sp_LocalAndUserDefinedVariableDemo();
निम्न आउटपुट है:
<पूर्व>+---------------+| स्थानीय चर |+---------------+| 20 |+---------------+1 पंक्ति सेट में (0.32 सेकंड)+---------------+| @userVariable |+---------------+| 20 |+---------------+1 पंक्ति सेट में (0.34 सेकंड) क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.36 सेकंड)दूसरी कॉल में, उपयोगकर्ता द्वारा परिभाषित चर का मान 20 होगा और 20+10=30 की तरह 10 जोड़ देगा जबकि स्थानीय चर को फिर से 10 के साथ फिर से शुरू किया जाएगा और 10 को 10+10=20 की तरह जोड़ा जाएगा।
संग्रहीत कार्यविधि को कॉल करें और नमूना आउटपुट की जांच करें:
mysql> कॉल करें sp_LocalAndUserDefinedVariableDemo();
निम्न आउटपुट है:
<पूर्व>+---------------+| स्थानीय चर |+---------------+| 20 |+---------------+1 पंक्ति सेट में (0.00 सेकंड)+---------------+| @userVariable |+---------------+| 30 |+---------------+1 पंक्ति सेट में (0.01 सेकंड) क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.02 सेकंड)तीसरे कॉल में, उपयोगकर्ता द्वारा परिभाषित वैरिएबल का मान 30 होगा और 30+10=40 की तरह 10 जोड़ देगा जबकि स्थानीय वैरिएबल को फिर से 10 के साथ फिर से शुरू किया जाएगा और 10 को 10+10=20 की तरह जोड़ा जाएगा।
अब आप कह सकते हैं कि प्रत्येक प्रक्रिया में स्थानीय चर को कुछ मूल्य के साथ फिर से शुरू किया जाता है जो कि शून्य या कुछ अन्य मूल्य हो सकता है जैसे मेरे मामले में मैंने डिफ़ॉल्ट मान प्रदान किया है जो 10 है। इसका मतलब है कि यह स्थानीय चर को मान 10 के साथ सेट करता है प्रत्येक प्रक्रिया कॉल जबकि उपयोगकर्ता परिभाषित चर नहीं करता है।