MySQL
में user-defined variables की अवधारणा है।
वे ढीले टाइप किए गए चर हैं जिन्हें किसी सत्र में कहीं भी प्रारंभ किया जा सकता है और सत्र समाप्त होने तक उनका मान रखें।
वे एक @
संकेत के साथ prepended कर रहे हैं इस तरह:
SET @var = 1
SELECT @var2 := 2
आप MySQL
में एक संग्रहीत प्रक्रिया का विकास कब: @var
आप एक प्रश्न में एक SET
बयान के साथ इस चर को प्रारंभ या अंदर कर सकते हैं , आप इनपुट पैरामीटर पास कर सकते हैं और स्थानीय चर घोषित कर सकते हैं:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
ये चर किसी भी उपसर्ग के साथ प्रीपेड नहीं हैं।
एक प्रक्रिया चर और एक सत्र-विशिष्ट उपयोगकर्ता परिभाषित चर के बीच अंतर यह है कि प्रक्रिया चर NULL
हर बार प्रक्रिया कहा जाता है इसे पुनः शुरू किया गया है, जबकि सत्र-विशिष्ट चर नहीं है:
CREATE PROCEDURE prc_test()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 = var2 + 1;
SET @var2 = @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
जैसा कि आप देख सकते हैं, var2
(प्रक्रिया परिवर्तनीय) प्रक्रिया को हर बार पुन: प्रारंभ किया जाता है, जबकि @var2
(सत्र-विशिष्ट चर) नहीं है। इन "सत्र चर" कर रहे हैं;
(उपयोगकर्ता-निर्धारित वेरिएबल के अलावा, MySQL भी कुछ पूर्वनिर्धारित "प्रणाली चर", इस तरह के @@session.sql_mode
के रूप में "वैश्विक चर" जैसे @@global.port
या "सत्र चर" हो सकता है जो है सत्र-विशिष्ट उपयोगकर्ता-परिभाषित चर से असंबंधित।)
यह भी ध्यान रखें कि वैश्विक चर उपलब्ध हैं: उदाहरण के लिए 'SELECT @@ संस्करण;' देखें। यह भी एक कारण है, 'DELIMITER @@' का उपयोग क्यों करना वास्तव में एक अच्छा विचार नहीं है। – Mchl
यह नए परिणामों के लिए नए प्रश्न बनाता है ... क्या आपके उदाहरण में "var = var" और "var: = var" के बीच कोई अंतर है? – confiq
@confiq: कोई नहीं है। – Quassnoi