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 ব্যবহার করে আপনি ডেটা টাইপের সাথে সম্পর্কিত লজিকাল ভুল এড়াতে পারবেন এবং কোডের রক্ষণাবেক্ষণ এবং সম্প্রসারণে সহজতা পাবেন।