PL/SQL-এর Scope এবং Lifetime দুটি গুরুত্বপূর্ণ ধারণা, যেগুলি ভেরিয়েবল ও ডেটা কিভাবে ব্যবহৃত এবং জীবিত থাকে তা নির্ধারণ করে। এগুলি প্রোগ্রামের মধ্যে ভেরিয়েবলগুলির অ্যাক্সেস এবং বৈধতা সংক্রান্ত নিয়মাবলী নির্ধারণ করে।
১. Scope (স্কোপ)
Scope মানে হল যে ভেরিয়েবলটি কিভাবে এবং কোথায় অ্যাক্সেসযোগ্য। PL/SQL-এ, ভেরিয়েবলের স্কোপ তার ডিক্লারেশনের অবস্থান এবং কীভাবে তা ব্যবহার করা হয়, তার ওপর নির্ভর করে। ভেরিয়েবল সাধারণত তিনটি প্রধান স্কোপে বিভক্ত:
Local Scope (স্থানীয় স্কোপ):
- যখন একটি ভেরিয়েবল একটি ব্লক বা সাব-প্রোগ্রাম (যেমন, ফাংশন, প্রোসিডিউর) এর মধ্যে ঘোষণা করা হয়, তখন এটি শুধুমাত্র সেই ব্লকের মধ্যে অ্যাক্সেসযোগ্য। অন্য ব্লক বা সাব-প্রোগ্রামে এটি অ্যাক্সেস করা সম্ভব নয়।
- উদাহরণস্বরূপ, যদি আপনি একটি ভেরিয়েবল
DECLAREসেকশনে একটি প্রোসিডিউরের মধ্যে ঘোষণা করেন, তবে সেটি শুধুমাত্র সেই প্রোসিডিউরের মধ্যে ব্যবহারযোগ্য।
উদাহরণ:
DECLARE v_local_variable NUMBER; -- Local variable within this block BEGIN v_local_variable := 10; -- Accessed and used inside BEGIN block END;Global Scope (গ্লোবাল স্কোপ):
- গ্লোবাল স্কোপ এমন ভেরিয়েবলগুলির জন্য ব্যবহৃত হয়, যা একাধিক ব্লক বা সাব-প্রোগ্রামে ব্যবহৃত হতে পারে। সাধারণত, Packages এবং Global Variables গ্লোবাল স্কোপে অন্তর্ভুক্ত থাকে।
- PL/SQL প্যাকেজের মধ্যে ঘোষণা করা ভেরিয়েবলগুলি গ্লোবাল স্কোপের অন্তর্গত এবং প্যাকেজের সকল ফাংশন, প্রোসিডিউর এবং ট্রিগারগুলির মধ্যে অ্যাক্সেস করা যায়।
উদাহরণ:
CREATE OR REPLACE PACKAGE my_package AS v_global_variable NUMBER := 100; -- Global variable within the package END my_package; CREATE OR REPLACE PROCEDURE check_variable IS BEGIN DBMS_OUTPUT.PUT_LINE(my_package.v_global_variable); -- Accessed globally END;- Block Scope (ব্লক স্কোপ):
- PL/SQL-এ প্রতিটি ব্লক একটি নিজস্ব স্কোপ তৈরি করে। যদি একটি ভেরিয়েবল একটি ব্লকের মধ্যে ঘোষণা করা হয়, তবে সেই ভেরিয়েবলটি শুধুমাত্র সেই ব্লকের ভিতরে অ্যাক্সেস করা যাবে। ব্লকটির বাইরে গেলে ভেরিয়েবলটি অবৈধ হয়ে যাবে।
- স্কোপের এই সীমাবদ্ধতা PL/SQL-এর সঠিক ব্যবহার এবং ডেটা ইনক্যাপসুলেশন নিশ্চিত করে।
২. Lifetime (লাইফটাইম)
Lifetime হল সেই সময়কাল, যখন একটি ভেরিয়েবল স্মৃতিতে অবস্থান করে এবং অ্যাক্সেসযোগ্য থাকে। PL/SQL-এর ভেরিয়েবলগুলির লাইফটাইম ভেরিয়েবলটির স্কোপের উপর নির্ভর করে এবং সেটি কোন ব্লক বা সাব-প্রোগ্রামে ডিক্লেয়ার করা হয়েছে তার ওপর নির্ভর করে।
Local Variable Lifetime:
- স্থানীয় ভেরিয়েবলগুলি যখন একটি ব্লক বা সাব-প্রোগ্রাম চালানো হয়, তখন তাদের লাইফটাইম শুরু হয় এবং সেই ব্লকের শেষে তা শেষ হয়ে যায়। অর্থাৎ, যেহেতু এটি শুধু এক ব্লকের মধ্যে অ্যাক্সেসযোগ্য, তাই ব্লকটি সম্পূর্ণ হলে এটি মেমোরি থেকে মুছে যায়।
উদাহরণ:
DECLARE v_local_variable NUMBER := 10; BEGIN -- v_local_variable can be used here END; -- Once the block ends, v_local_variable's lifetime endsGlobal Variable Lifetime:
- গ্লোবাল ভেরিয়েবলগুলির লাইফটাইম প্যাকেজ বা অ্যাপ্লিকেশন রuntime-এর সময়কাল পর্যন্ত থাকে। সাধারণত, প্যাকেজ ভেরিয়েবলগুলির লাইফটাইম হয় সেই প্যাকেজটি লোড হওয়ার সময় থেকে শুরু হয়ে, যতক্ষণ না প্যাকেজটি অপ্রয়োজনীয় হয়ে যায় বা মেমোরি থেকে মুছে ফেলা হয়।
উদাহরণ:
CREATE OR REPLACE PACKAGE my_package AS v_global_variable NUMBER := 100; END my_package; -- The lifetime of v_global_variable lasts as long as the package is in memoryCursor and Ref Cursor Lifetime:
- যদি আপনি একটি cursor ব্যবহার করেন, তাহলে এটি ব্যবহার করার সময় cursor lifetime থাকবে। কিউরি একটি নির্দিষ্ট ব্লক বা সাব-প্রোগ্রাম চালানোর পরে এটি সমাপ্ত হয়ে যায়। এক্সপ্লিসিট কার্সার ব্যবহারে, আপনি কনট্রোল করতে পারেন কখন এটি খোলা বা বন্ধ হবে।
উদাহরণ:
DECLARE CURSOR emp_cursor IS SELECT employee_id, employee_name FROM employees; v_employee emp_cursor%ROWTYPE; BEGIN OPEN emp_cursor; FETCH emp_cursor INTO v_employee; CLOSE emp_cursor; END;- VARRAY/Collection Lifetime:
- VARRAY এবং Collection টাইপের ভেরিয়েবলগুলি একটি ব্লক বা প্রোসিডিউর পর্যন্ত জীবিত থাকে, এবং একবার ব্লকটি বা প্রোসিডিউরটি শেষ হলে তাদের লাইফটাইমও শেষ হয়ে যায়।
৩. Anchored Data Types এর Scope এবং Lifetime
Anchored data types যেমন %TYPE এবং %ROWTYPE যদি কোনও টেবিল বা কলামের সাথে সম্পর্কিত থাকে, তবে তাদের লাইফটাইমও ওই টেবিল বা কলামের সাথে সম্পর্কিত হয়ে থাকে।
উদাহরণ:
DECLARE
v_employee_name employees.employee_name%TYPE; -- Anchored variable
BEGIN
SELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = 101;
END;
এখানে, v_employee_name ভেরিয়েবলটির লাইফটাইম হবে যতক্ষণ না ওই ব্লকটি বা প্রোসিডিউরটি চলমান থাকে।
সারাংশ
PL/SQL-এ Scope এবং Lifetime ভেরিয়েবল এবং অন্যান্য ডেটা টাইপের ব্যবহার, অ্যাক্সেস এবং মেমরি পরিচালনার সাথে সম্পর্কিত।
- Scope নির্ধারণ করে কোথায় ভেরিয়েবলটি অ্যাক্সেসযোগ্য।
- Lifetime নির্ধারণ করে একটি ভেরিয়েবল কত সময় পর্যন্ত জীবিত থাকবে এবং মেমোরিতে থাকবে।
এগুলি প্রোগ্রামটি লেখার সময় গুরুত্বপূর্ণ কারণ এগুলি ভেরিয়েবল ব্যবস্থাপনার সঠিক কৌশল নির্ধারণে সাহায্য করে।