PL/SQL (Procedural Language for SQL) প্রোগ্রামিং ভাষায় ভেরিয়েবল ডিক্লারেশন এবং ব্যবহারের জন্য কিছু নির্দিষ্ট নিয়ম এবং গঠন রয়েছে। এই নিয়মগুলি PL/SQL কোডের কার্যকারিতা ও স্থিতিশীলতা নিশ্চিত করতে সাহায্য করে। চলুন, ভেরিয়েবল ডিক্লারেশন এবং তার ব্যবহারের কিছু মূল নিয়ম এবং উদাহরণ দেখে নিই।
১. ভেরিয়েবল ডিক্লারেশন
PL/SQL-এ, ভেরিয়েবল সাধারণত DECLARE সেকশনে ডিক্লেয়ার করা হয়। ভেরিয়েবল ডিক্লারেশনের সময় আপনাকে অবশ্যই সেই ভেরিয়েবলের জন্য একটি ডেটা টাইপ উল্লেখ করতে হবে। ভেরিয়েবল ডিক্লারেশনের সঠিক সেমান্টিক্স হল:
DECLARE
v_variable_name datatype;
BEGIN
-- executable section
END;
ভেরিয়েবল ডিক্লারেশনের নিয়ম:
ডেটা টাইপ উল্লেখ করা: প্রতিটি ভেরিয়েবলের জন্য সঠিক ডেটা টাইপ উল্লেখ করা আবশ্যক।
- সংখ্যা:
NUMBER,INTEGER,FLOATইত্যাদি - স্ট্রিং:
VARCHAR2,CHARইত্যাদি - তারিখ:
DATE
উদাহরণ:
DECLARE v_salary NUMBER(8,2); -- Number data type with 8 digits and 2 decimal places v_name VARCHAR2(100); -- String data type with maximum 100 characters- সংখ্যা:
ভেরিয়েবল নামের কনভেনশন: ভেরিয়েবলের নাম শুরু হওয়া উচিত অক্ষর দিয়ে (যেমন
v_অথবাemp_) এবং এটি অক্ষর, সংখ্যা, এবং আন্ডারস্কোর (_) দ্বারা গঠিত হতে পারে।ভেরিয়েবল নামের নিয়ম:
- নামের প্রথম অক্ষর অবশ্যই অক্ষর হতে হবে (অর্থাৎ, সংখ্যা দিয়ে শুরু করা যাবে না)।
- নামের মধ্যে বিশেষ অক্ষর ব্যবহার করা যাবে না (যেমন
!,@,%,&)। - নামটি সংক্ষিপ্ত এবং পরিষ্কার হওয়া উচিত, যাতে এটি সহজে বোঝা যায়।
ভেরিয়েবল আকার: কিছু ডেটা টাইপের জন্য, আপনি সাইজ উল্লেখ করতে পারেন। যেমন:
- VARCHAR2: সর্বাধিক অক্ষরের সংখ্যা উল্লেখ করতে হয়।
- NUMBER: সংখ্যার জন্য, মোট ডিজিট এবং দশমিক সংখ্যা উল্লেখ করা হয়।
উদাহরণ:
DECLARE v_id NUMBER(5); -- Integer with 5 digits v_name VARCHAR2(100); -- String with maximum 100 charactersভেরিয়েবল ডিফল্ট মান: PL/SQL-এ আপনি ভেরিয়েবল ডিফল্ট মান প্রদান করতে পারেন। যদি কোন মান সরাসরি প্রদান না করা হয়, তবে তা ডিফল্ট মান গ্রহণ করবে। যেমন,
NUMBERটাইপের ভেরিয়েবল ডিফল্টভাবেNULLথাকে।উদাহরণ:
DECLARE v_salary NUMBER(8,2) := 5000.00; -- Initializing v_salary with a value
২. ভেরিয়েবল ব্যবহারের নিয়ম
ভেরিয়েবল ডিক্লেয়ার করার পর, আপনি সেগুলিকে BEGIN সেকশনে ব্যবহার করতে পারেন। PL/SQL-এ ভেরিয়েবল ব্যবহার করার সময় কিছু নির্দিষ্ট নিয়ম অনুসরণ করা হয়:
ভেরিয়েবল অ্যাসাইনমেন্ট: আপনি
:=অপারেটর ব্যবহার করে ভেরিয়েবলে মান অ্যাসাইন করতে পারেন। মান অ্যাসাইন করার জন্যSELECT INTOস্টেটমেন্টও ব্যবহার করা যেতে পারে।উদাহরণ:
BEGIN v_salary := 4500.00; -- Assigning value to v_salary v_name := 'John Doe'; -- Assigning value to v_name END;SQL স্টেটমেন্টে ভেরিয়েবল ব্যবহার: PL/SQL-এ SQL স্টেটমেন্ট ব্যবহার করার সময় আপনি ভেরিয়েবল ব্যবহার করতে পারেন।
SELECT INTOস্টেটমেন্ট ব্যবহার করে আপনি SQL কুইরির রেজাল্ট সরাসরি ভেরিয়েবলে ইনসার্ট করতে পারেন।উদাহরণ:
BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = 101; DBMS_OUTPUT.PUT_LINE('Employee salary: ' || v_salary); END;CONSTANTS (কনস্ট্যান্টস): PL/SQL-এ আপনি কনস্ট্যান্ট ভেরিয়েবল ব্যবহার করতে পারেন, যা একবার ডিক্লেয়ার করার পর পরিবর্তিত হয় না। এগুলি ব্যবহার করে আপনি স্থির মান সংরক্ষণ করতে পারেন।
উদাহরণ:
DECLARE c_tax_rate CONSTANT NUMBER := 0.10; -- Defining a constant tax rate v_price NUMBER := 1000; -- Defining a variable for price BEGIN v_price := v_price + (v_price * c_tax_rate); -- Using constant value in calculation DBMS_OUTPUT.PUT_LINE('Price after tax: ' || v_price); END;- Anchored Data Types: PL/SQL-এ আপনি
%TYPEএবং%ROWTYPEব্যবহার করে ভেরিয়েবল ডিক্লেয়ার করতে পারেন, যা টেবিলের কলাম অথবা রেকর্ড টাইপের ডেটা টাইপের সাথে অঙ্গীকারবদ্ধ থাকে।%TYPE: টেবিলের কলাম ডেটা টাইপ অনুযায়ী ভেরিয়েবল ডিক্লেয়ার করা হয়।
DECLARE v_emp_name employees.employee_name%TYPE; BEGIN SELECT employee_name INTO v_emp_name FROM employees WHERE employee_id = 101; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name); END;%ROWTYPE: টেবিলের পুরো রেকর্ডের জন্য একটি ভেরিয়েবল ডিক্লেয়ার করা হয়।
DECLARE v_emp_record employees%ROWTYPE; -- Declare a variable for an entire row BEGIN SELECT * INTO v_emp_record FROM employees WHERE employee_id = 101; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_record.employee_name); END;
৩. ভেরিয়েবল স্কোপ (Scope) এবং লাইফটাইম (Lifetime)
PL/SQL-এ, ভেরিয়েবলগুলির স্কোপ এবং লাইফটাইম খুব গুরুত্বপূর্ণ।
- স্কোপ: ভেরিয়েবল যেখান থেকে অ্যাক্সেসযোগ্য, সেটি তার স্কোপ।
- Local Scope: যখন ভেরিয়েবল একটি ব্লকের মধ্যে ডিক্লেয়ার করা হয়, তখন তা শুধুমাত্র সেই ব্লকের ভিতরে ব্যবহার করা যায়।
- Global Scope: কিছু ভেরিয়েবল যদি Package অথবা Global Variable হিসেবে ডিক্লেয়ার করা হয়, তবে সেগুলি পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত হতে পারে।
- লাইফটাইম: ভেরিয়েবলের লাইফটাইম হল তার জীবনের সময়কাল, অর্থাৎ কবে থেকে ভেরিয়েবল তৈরি হতে শুরু করে এবং কবে তা ধ্বংস হয়।
- Local Variables: একটি ব্লকের শেষে ভেরিয়েবলটি ধ্বংস হয়।
- Global Variables: যখন অ্যাপ্লিকেশন শেষ হয় তখন এটি ধ্বংস হয়।
সারাংশ:
PL/SQL-এ ভেরিয়েবল ডিক্লারেশন এবং ব্যবহারের নিয়মগুলি ঠিকমতো অনুসরণ করা খুবই গুরুত্বপূর্ণ। সঠিক ডেটা টাইপ নির্বাচন, নামকরণ কনভেনশন এবং SQL স্টেটমেন্টে ভেরিয়েবল ব্যবহার করা প্রোগ্রামিং কোডের কার্যকারিতা ও গঠনশীলতা নিশ্চিত করে।
PL/SQL-এ ভেরিয়েবলগুলি একটি গুরুত্বপূর্ণ অংশ, যেগুলি ডেটা সংরক্ষণ এবং প্রক্রিয়া করতে ব্যবহৃত হয়। ভেরিয়েবলগুলি সাধারণত ডেটাবেস বা প্রোগ্রামিং লজিকের মধ্যে ডেটা স্টোর করতে সাহায্য করে। ভেরিয়েবল ঘোষণা করার সময়, আপনাকে একটি ডেটা টাইপ এবং একটি ভেরিয়েবলের নাম নির্বাচন করতে হয়। এছাড়াও, আপনি প্রয়োজনীয় ডিফল্ট মানও প্রদান করতে পারেন।
১. ভেরিয়েবল ঘোষণা করা (Declaring Variables)
PL/SQL-এ ভেরিয়েবলগুলি DECLARE সেকশনে ঘোষণা করা হয়। এখানে আপনি ভেরিয়েবলের নাম এবং তার ডেটা টাইপ উল্লেখ করেন।
ভেরিয়েবল ঘোষণা করার সিমেন্ট্যাক্স:
DECLARE
<variable_name> <data_type>;
ভেরিয়েবল ঘোষণা করার উদাহরণ:
DECLARE
v_employee_name VARCHAR2(50); -- Employee name variable
v_employee_id NUMBER(6); -- Employee ID variable
v_salary NUMBER(8,2); -- Salary variable
এখানে:
v_employee_name: একটি VARCHAR2 টাইপ ভেরিয়েবল যা ৫০ ক্যারেক্টার পর্যন্ত স্টোর করতে পারে।v_employee_id: একটি NUMBER টাইপ ভেরিয়েবল যা ৬ ডিজিট পর্যন্ত স্টোর করতে পারে।v_salary: একটি NUMBER টাইপ ভেরিয়েবল যা ৮ ডিজিট, যার মধ্যে ২টি ডেসিমাল পয়েন্ট থাকবে।
২. ভেরিয়েবল ব্যবহার করা (Using Variables)
ভেরিয়েবল ব্যবহার করতে হলে, সেগুলি BEGIN সেকশনে ব্যবহৃত হয়। এখানে, আপনি বিভিন্ন ধরনের SQL বা PL/SQL স্টেটমেন্টের মধ্যে ভেরিয়েবলগুলি অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন।
১. SELECT INTO Statement
ভেরিয়েবলগুলির মান অ্যাসাইন করতে SQL স্টেটমেন্ট ব্যবহার করা হয়, যেমন SELECT INTO।
উদাহরণ:
BEGIN
-- Selecting data from employees table and assigning to variables
SELECT employee_name, salary INTO v_employee_name, v_salary
FROM employees
WHERE employee_id = 101;
-- Displaying the fetched data
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;
এখানে:
v_employee_nameএবংv_salaryভেরিয়েবলগুলিতে employees টেবিল থেকে ডেটা অ্যাসাইন করা হয়েছে।
২. Assignment Statements
PL/SQL-এ আপনি সরাসরি ভেরিয়েবলে মান অ্যাসাইন করতে পারেন। এটি একটি সাধারণ পদ্ধতি।
উদাহরণ:
BEGIN
v_employee_id := 101; -- Assigning a value to the variable
v_salary := 5500.50; -- Assigning a value to the salary variable
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id);
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
END;
এখানে:
v_employee_idএবংv_salaryভেরিয়েবলগুলির মান := (Assignment Operator) ব্যবহার করে অ্যাসাইন করা হয়েছে।
৩. Conditional Logic with Variables
ভেরিয়েবলগুলিকে শর্তসাপেক্ষ লজিক (যেমন IF বা CASE স্টেটমেন্ট) এর মধ্যে ব্যবহার করা হয়।
উদাহরণ:
BEGIN
v_salary := 5500;
IF v_salary > 5000 THEN
DBMS_OUTPUT.PUT_LINE('High salary');
ELSE
DBMS_OUTPUT.PUT_LINE('Normal salary');
END IF;
END;
এখানে:
v_salaryভেরিয়েবলটির মানের উপর ভিত্তি করে শর্ত চেক করা হচ্ছে এবং এর ফলাফলDBMS_OUTPUT.PUT_LINEদিয়ে আউটপুট হিসেবে দেখানো হচ্ছে।
৩. ভেরিয়েবল ডেটা টাইপ নির্বাচন
ভেরিয়েবলের ডেটা টাইপ নির্বাচন গুরুত্বপূর্ণ, কারণ এটি ডেটার সঠিকতা নিশ্চিত করে এবং কার্যকারিতার দক্ষতা বাড়ায়। PL/SQL-এ কিছু সাধারণ ডেটা টাইপ রয়েছে যেমন NUMBER, VARCHAR2, DATE, BOOLEAN, CHAR, ইত্যাদি।
ভেরিয়েবল ডেটা টাইপের উদাহরণ:
- NUMBER:
- পূর্ণসংখ্যা বা দশমিক সংখ্যা সংরক্ষণ করতে ব্যবহৃত হয়।
- Syntax:
NUMBER(p, s)wherepis precision andsis scale. - উদাহরণ:
v_salary NUMBER(8, 2);(8 digits, 2 after decimal)
- VARCHAR2:
- স্ট্রিং সংরক্ষণ করতে ব্যবহৃত হয়।
- Syntax:
VARCHAR2(size) - উদাহরণ:
v_name VARCHAR2(100);(Maximum 100 characters)
- DATE:
- তারিখ এবং সময় সংরক্ষণ করতে ব্যবহৃত হয়।
- Syntax:
DATE - উদাহরণ:
v_hire_date DATE;
- BOOLEAN:
- শুধু দুটি মান ধারণ করতে পারে: TRUE অথবা FALSE।
- Syntax:
BOOLEAN - উদাহরণ:
v_is_active BOOLEAN;
৪. Anchored Data Types (%TYPE এবং %ROWTYPE)
Anchored data types ভেরিয়েবলের ডেটা টাইপ নির্ধারণ করার সময় আপনি টেবিলের কলাম বা রেকর্ডের সাথে সম্পর্কিত ডেটা টাইপ ব্যবহার করতে পারেন। এটি ডেটাবেসের কাঠামোর সাথে সিনক্রোনাইজড রাখতে সাহায্য করে।
%TYPE: এটি একটি কলামের ডেটা টাইপকে অ্যাসাইন করার জন্য ব্যবহৃত হয়।
DECLARE v_employee_name employees.employee_name%TYPE; -- Anchored to employees table column%ROWTYPE: এটি একটি টেবিলের একটি সম্পূর্ণ রেকর্ড টাইপের জন্য ব্যবহৃত হয়।
DECLARE v_employee employees%ROWTYPE; -- Anchored to the entire row of employees table
৫. ভেরিয়েবল এর স্কোপ (Scope)
ভেরিয়েবলের স্কোপ নির্ধারণ করে যে ভেরিয়েবলটি কোন অংশে অ্যাক্সেসযোগ্য। PL/SQL-এ ভেরিয়েবলগুলি সাধারণত প্রোগ্রাম ব্লক বা সাব-প্রোগ্রাম (ফাংশন, প্রোসিডিউর) অনুযায়ী স্কোপ থাকে।
- Block-level variables: ভেরিয়েবলটি শুধুমাত্র সেই ব্লকের মধ্যে অ্যাক্সেসযোগ্য যেখানে তা ডিক্লেয়ার করা হয়েছে।
- Global variables: যদি কোনও ভেরিয়েবল প্রোগ্রামের বাইরে ডিক্লেয়ার করা হয়, তবে এটি প্রোগ্রামের সব অংশে অ্যাক্সেসযোগ্য হতে পারে।
সারাংশ:
PL/SQL-এ ভেরিয়েবল ঘোষণা করা এবং ব্যবহার করা খুবই গুরুত্বপূর্ণ এবং এটি প্রোগ্রামের কার্যকারিতার মধ্যে ডেটা পরিচালনার জন্য অপরিহার্য। আপনি ভেরিয়েবলগুলি বিভিন্ন ডেটা টাইপ এবং ডিক্লেয়ারেশন মেথড ব্যবহার করে ঘোষণা এবং ব্যবহারের মাধ্যমে প্রোগ্রামে লজিক এবং ডেটাবেস অপারেশন সম্পাদন করতে পারবেন।
PL/SQL-এ Anchored Data Types ব্যবহার করে আপনি একটি ভেরিয়েবলের ডেটা টাইপ বা রেকর্ডের ফর্ম্যাটকে একটি টেবিল বা কলামের ডেটা টাইপের সাথে সম্পর্কিত করতে পারেন। এর মাধ্যমে আপনি ডেটা টাইপের সাথে সম্পর্কিত রেফারেন্স তৈরি করতে পারেন, যা কোডের রক্ষণাবেক্ষণ সহজ করে তোলে এবং টাইপের অসঙ্গতি থেকে বাঁচায়।
PL/SQL-এ দুইটি প্রধান anchored data type রয়েছে:
- %TYPE
- %ROWTYPE
১. %TYPE
%TYPE একটি anchored data type যা একটি টেবিলের বা কলামের ডেটা টাইপ ব্যবহার করে একটি ভেরিয়েবলের ডেটা টাইপ তৈরি করে। এর মাধ্যমে আপনি সেই কলামের ডেটা টাইপ পরিবর্তন হলে, ভেরিয়েবলের ডেটা টাইপও আপডেট হয়ে যাবে, যা কোডের রক্ষণাবেক্ষণকে সহজ করে।
ব্যবহার:
- আপনি একটি টেবিলের কলামের ডেটা টাইপের সাথে সম্পর্কিত ভেরিয়েবল তৈরি করতে
%TYPEব্যবহার করেন। - এইভাবে, যখন টেবিলের কলামের ডেটা টাইপ পরিবর্তন হবে, তখন আপনাকে ভেরিয়েবলের ডেটা টাইপ পরিবর্তন করতে হবে না।
সিনট্যাক্স:
v_variable_name table_name.column_name%TYPE;
উদাহরণ:
ধরা যাক, একটি টেবিল employees আছে, যার একটি কলাম employee_name (যার টাইপ VARCHAR2(50)) আছে। আপনি যদি একটি ভেরিয়েবল তৈরি করতে চান, যা employee_name কলামের টাইপের মতো হবে, তাহলে আপনি %TYPE ব্যবহার করবেন।
DECLARE
v_name employees.employee_name%TYPE; -- Anchored data type
BEGIN
-- Now, the v_name variable has the same type as the employee_name column in the employees table
SELECT employee_name INTO v_name FROM employees WHERE employee_id = 101;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
END;
এখানে, v_name ভেরিয়েবলের টাইপ হবে employees.employee_name কলামের টাইপের মতো (এটি VARCHAR2(50)), তাই যখন employee_name কলামের টাইপ পরিবর্তিত হবে, তখন v_name ভেরিয়েবলও স্বয়ংক্রিয়ভাবে সেই টাইপ গ্রহণ করবে।
২. %ROWTYPE
%ROWTYPE একটি anchored data type যা একটি টেবিলের সম্পূর্ণ রেকর্ডের স্ট্রাকচার ধারণ করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি একটি পূর্ণ রেকর্ড ঘোষণা করতে পারেন, যার মধ্যে টেবিলের সমস্ত কলামের ডেটা টাইপ থাকে। এটি একটি ভেরিয়েবল হিসাবে পুরো টেবিলের একটি রেকর্ড ধারণ করে।
ব্যবহার:
- আপনি
%ROWTYPEব্যবহার করে একটি টেবিলের সমস্ত কলামের জন্য একটি রেকর্ড ভেরিয়েবল তৈরি করতে পারেন। - এইভাবে, আপনি পুরো রেকর্ডকে একটি ভেরিয়েবলে ধারণ করতে পারবেন।
সিনট্যাক্স:
v_record_name table_name%ROWTYPE;
উদাহরণ:
ধরা যাক, আপনি একটি টেবিল employees এর সমস্ত কলামকে একসাথে এক ভেরিয়েবলে সংরক্ষণ করতে চান। তাহলে আপনি %ROWTYPE ব্যবহার করতে পারেন।
DECLARE
v_employee employees%ROWTYPE; -- Declare a record variable for the entire row of employees table
BEGIN
-- Fetch an entire row from the employees table into the v_employee record
SELECT * INTO v_employee FROM employees WHERE employee_id = 101;
-- Access individual fields from the record
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee.employee_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_employee.salary);
END;
এখানে, v_employee একটি রেকর্ড টাইপের ভেরিয়েবল, যা employees টেবিলের একটি সম্পূর্ণ রেকর্ড ধারণ করে। এই ভেরিয়েবলে employees টেবিলের সব কলামের জন্য ফিল্ড থাকবে, যেমন employee_id, employee_name, salary ইত্যাদি।
%TYPE এবং %ROWTYPE এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | %TYPE | %ROWTYPE |
|---|---|---|
| কাজ | একটি নির্দিষ্ট কলামের ডেটা টাইপ ব্যবহার করে ভেরিয়েবল ঘোষণা | টেবিলের একটি সম্পূর্ণ রেকর্ড ধারণ করে একটি ভেরিয়েবল ঘোষণা |
| ব্যবহার | একক ভেরিয়েবল ঘোষণা করতে ব্যবহার হয় | টেবিলের সমস্ত কলাম বা এক সম্পূর্ণ রেকর্ড ধারণ করতে ব্যবহৃত হয় |
| ডেটা টাইপ | কলামের ডেটা টাইপ। একাধিক ভেরিয়েবলের জন্য পৃথকভাবে ব্যবহার করা যায় | পুরো টেবিলের রেকর্ড ডেটা টাইপ। সমস্ত কলামের ডেটা টাইপ ধারণ করে |
| উদাহরণ | v_name employees.employee_name%TYPE; | v_employee employees%ROWTYPE; |
সারাংশ:
- %TYPE আপনাকে একটি ভেরিয়েবলের ডেটা টাইপ একটি টেবিলের কলামের ডেটা টাইপের সাথে সম্পর্কিত করতে দেয়।
- %ROWTYPE আপনাকে একটি টেবিলের সমস্ত কলাম থেকে একটি রেকর্ড তৈরি করতে দেয়, যা একাধিক কলামের ডেটা ধারণ করতে সক্ষম।
এই anchored data types ব্যবহার করে আপনি ডেটা টাইপের সাথে সম্পর্কিত লজিকাল ভুল এড়াতে পারবেন এবং কোডের রক্ষণাবেক্ষণ এবং সম্প্রসারণে সহজতা পাবেন।
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 নির্ধারণ করে একটি ভেরিয়েবল কত সময় পর্যন্ত জীবিত থাকবে এবং মেমোরিতে থাকবে।
এগুলি প্রোগ্রামটি লেখার সময় গুরুত্বপূর্ণ কারণ এগুলি ভেরিয়েবল ব্যবস্থাপনার সঠিক কৌশল নির্ধারণে সাহায্য করে।
Read more