ব্যবহারকারীর সংজ্ঞায়িত চলকটি সেশন-নির্দিষ্ট ভেরিয়েবল হিসাবেও পরিচিত। এটি হল এক ধরনের ঢিলেঢালাভাবে টাইপ করা ভেরিয়েবল যা সেশনে কোথাও শুরু করা যেতে পারে এবং সেশন শেষ না হওয়া পর্যন্ত ব্যবহারকারীর সংজ্ঞায়িত ভেরিয়েবলের মান থাকে।
ব্যবহারকারীর সংজ্ঞায়িত ভেরিয়েবলটি @ প্রতীকের সাথে উপসর্গযুক্ত। উদাহরণের জন্য:
@anyVariableName;
দুটি পন্থা আছে যার মাধ্যমে আপনি ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল শুরু করতে পারেন। আপনি SET কমান্ড বা SELECT ক্যোয়ারী ব্যবহার করতে পারেন। প্রথম পদ্ধতিটি নিম্নরূপ:
SET @anyVariableName=anyValue;
দ্বিতীয় পদ্ধতিটি নিম্নরূপ:
@anyVariableName নির্বাচন করুন :=anyValue;
আপনি যদি SELECT ক্যোয়ারীতে কোলন (:) ব্যবহার না করেন তবে এটি এক্সপ্রেশন হিসাবে মূল্যায়ন করে। ফলাফল সত্য বা মিথ্যা হবে:
mysql> নির্বাচন করুন @m=10;
নিম্নলিখিত আউটপুট:
<প্রে>+------+| @m=10 |+------+| 1 |+------+1 সারি সেটে (0.00 সেকেন্ড)লোকাল ভেরিয়েবল সংরক্ষিত পদ্ধতি, ফাংশন ইত্যাদিতে ব্যবহার করা যেতে পারে। এটি DECLARE কীওয়ার্ডের সাথে ব্যবহার করা হয়। ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের মতো @ উপসর্গের প্রয়োজন নেই।
সিনট্যাক্স স্থানীয় ভেরিয়েবলের জন্য নিম্নরূপ।
আপনার VariableName ডেটা টাইপ ঘোষণা করুন;
দ্রষ্টব্য :স্থানীয় ভেরিয়েবল এবং ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের মধ্যে প্রধান পার্থক্য হল যে স্থানীয় ভেরিয়েবল প্রতিবার NULL মান দিয়ে পুনরায় চালু করা হয় যখনই সঞ্চিত পদ্ধতি কল করা হয় যখন সেশন-নির্দিষ্ট ভেরিয়েবল বা ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল NULL দিয়ে পুনঃপ্রবর্তিত হয় না। একজন ব্যবহারকারী দ্বারা সেট করা একটি ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল অন্য ব্যবহারকারীর দ্বারা দেখা যায় না৷ ব্যবহারকারীর প্রস্থান করার সময় প্রদত্ত ব্যবহারকারীর জন্য যাই হোক না কেন সেশন ভেরিয়েবল স্বয়ংক্রিয়ভাবে ধ্বংস হয়ে যায়৷
এখানে সঞ্চিত পদ্ধতি সহ সেশন-নির্দিষ্ট ভেরিয়েবল এবং স্থানীয় ভেরিয়েবলের ডেমো রয়েছে। স্থানীয় ভেরিয়েবল এবং ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের সাথে একটি সঞ্চিত পদ্ধতি তৈরি করার প্রশ্নটি নিম্নরূপ:
mysql> ডিলিমিটার //mysql> প্রসিডিউর তৈরি করুন -> SET localVariable=localVariable+10; -> SET @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=20 এর মত 10 যোগ করবে।
সঞ্চিত পদ্ধতিতে কল করুন এবং নমুনা আউটপুট পরীক্ষা করুন:
mysql> কল sp_LocalAndUserDefinedVariableDemo();
নিম্নলিখিত আউটপুট:
+---------------+| স্থানীয় পরিবর্তনশীল |+---------------+| 20 |+---------------+1 সারি সেটে (0.00 সেকেন্ড)+---------------+| @userVariable |+---------------+| ৩০তৃতীয় কলে, ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলটি 30 মান ধারণ করবে এবং 30+10=40 এর মতো 10 যোগ করবে যখন স্থানীয় ভেরিয়েবল আবার 10 দিয়ে পুনরায় চালু হবে এবং 10+10=20 এর মতো 10 যোগ করবে।
এখন আপনি বলতে পারেন যে প্রতিটি পদ্ধতিতে কল স্থানীয় ভেরিয়েবলকে কিছু মান দিয়ে পুনরায় আরম্ভ করা হয় যা NULL বা অন্য কিছু মান হতে পারে যেমন আমার ক্ষেত্রে আমি ডিফল্ট মান দিয়েছি যা 10। এর মানে এটি মান 10 এর সাথে স্থানীয় ভেরিয়েবল সেট করে। প্রতিটি পদ্ধতি কল যখন ব্যবহারকারী সংজ্ঞায়িত ভেরিয়েবল করে না।