MySQL
ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলগুলির ধারণা রয়েছে ।
এগুলি আলগাভাবে টাইপ করা ভেরিয়েবলগুলি যা কোনও সেশনে কোথাও সূচনা হতে পারে এবং সেশন শেষ হওয়া পর্যন্ত তাদের মান বজায় রাখে।
এগুলি একটি @
চিহ্ন সহ প্রেরেন্ট করা হয় :@var
আপনি এই ভেরিয়েবলটি একটি SET
বিবৃতি দিয়ে বা একটি ক্যোয়ারির ভিতরে শুরু করতে পারেন :
SET @var = 1
SELECT @var2 := 2
আপনি যখন সঞ্চিত পদ্ধতিটি বিকাশ করেন MySQL
, আপনি ইনপুট পরামিতিগুলি পাস করতে পারেন এবং স্থানীয় ভেরিয়েবলগুলি ঘোষণা করতে পারেন:
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
(সেশন-নির্দিষ্ট ভেরিয়েবল) হয় না।
(ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল ছাড়াও, মাইএসকিউএল এছাড়াও কিছু পূর্বনির্ধারিত "সিস্টেম ভেরিয়েবল", যেমন "গ্লোবাল ভেরিয়েবল" হতে পারে যা হয়েছে @@global.port
বা "সেশন ভেরিয়েবল" যেমন @@session.sql_mode
; এই "সেশন ভেরিয়েবল" সেশন-নির্দিষ্ট থেকে সম্পর্কহীন ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল।)