PL/SQL-এ ডেটা টাইপ এবং অপারেটরস খুবই গুরুত্বপূর্ণ, কারণ এগুলির মাধ্যমে আপনি ডেটা পরিচালনা এবং প্রসেস করতে পারেন। এই অংশে আমরা PL/SQL-এর বিভিন্ন ডেটা টাইপ এবং অপারেটরস নিয়ে আলোচনা করবো, যা আপনাকে ডেটাবেসের সঙ্গে কাজ করতে সাহায্য করবে।
১. PL/SQL ডেটা টাইপ (Data Types)
PL/SQL-এ বিভিন্ন ধরনের ডেটা টাইপ রয়েছে, যা ডেটার ধরন এবং মানের উপর নির্ভর করে ব্যবহৃত হয়। এই ডেটা টাইপগুলি মূলত দুইটি প্রধান ক্যাটেগরিতে ভাগ করা যেতে পারে: Scalar Data Types এবং Composite Data Types।
১.১ Scalar Data Types
Scalar ডেটা টাইপগুলি একক মান ধারণ করে। PL/SQL-এ প্রধান Scalar Data Types হল:
- NUMBER: এটি সংখ্যার জন্য ব্যবহৃত হয়।
NUMBERটাইপ ব্যবহার করে আপনি পূর্ণসংখ্যা (INTEGER) অথবা দশমিক সংখ্যা (FLOAT) ধারণ করতে পারেন।- Syntax:
NUMBER(p, s)p: Precision (মোট ডিজিটের সংখ্যা)s: Scale (ডেসিমাল পয়েন্টের পরের ডিজিট সংখ্যা)
উদাহরণ:
v_amount NUMBER(8,2); -- 8 ডিজিটের মধ্যে 2 ডেসিমাল পয়েন্ট
- Syntax:
- VARCHAR2: এটি পরিবর্তনশীল দৈর্ঘ্যের স্ট্রিং সংরক্ষণের জন্য ব্যবহৃত হয়।
- Syntax:
VARCHAR2(size) উদাহরণ:
v_name VARCHAR2(100); -- 100 ক্যারেক্টার পর্যন্ত নাম সংরক্ষণ
- Syntax:
- CHAR: এটি একটি নির্দিষ্ট দৈর্ঘ্যের স্ট্রিং সংরক্ষণ করতে ব্যবহৃত হয়।
- Syntax:
CHAR(size) উদাহরণ:
v_gender CHAR(1); -- 'M' অথবা 'F' ধারণ করা
- Syntax:
- DATE: তারিখ এবং সময় সংরক্ষণ করার জন্য ব্যবহৃত হয়।
- Syntax:
DATE উদাহরণ:
v_join_date DATE; -- Joining date for an employee
- Syntax:
- BOOLEAN: এটি দুইটি মান ধারণ করতে পারে:
TRUEঅথবাFALSE।- Syntax:
BOOLEAN উদাহরণ:
v_is_active BOOLEAN; -- TRUE or FALSE
- Syntax:
১.২ Composite Data Types
Composite Data Types হল এমন ডেটা টাইপ, যা একাধিক মান ধারণ করতে পারে।
- RECORD: একাধিক ভ্যালু একটি যৌথ টাইপে সংরক্ষণ করার জন্য ব্যবহৃত হয়। এটি একটি user-defined ডেটা টাইপ।
Syntax:
TYPE record_type IS RECORD ( field1 datatype, field2 datatype, ... );উদাহরণ:
TYPE employee_record IS RECORD ( employee_id NUMBER(6), employee_name VARCHAR2(50), hire_date DATE ); v_employee employee_record; -- Declare a variable of employee_record type
- TABLE: এটি একাধিক রেকর্ড ধারণ করতে পারে। এটি একটি অ্যারে টাইপ, যা একটি নির্দিষ্ট ডেটা টাইপের সব মান সংরক্ষণ করতে পারে।
Syntax:
TYPE table_type IS TABLE OF datatype;উদাহরণ:
TYPE number_table IS TABLE OF NUMBER; -- Table of numbers v_numbers number_table;
- VARRAY: এটি একটি স্থির সাইজের অ্যারে টাইপ, যা একাধিক ভ্যালু ধারণ করতে পারে।
Syntax:
TYPE varray_type IS VARRAY(size) OF datatype;উদাহরণ:
TYPE number_varray IS VARRAY(10) OF NUMBER; -- Array of 10 numbers v_varray number_varray;
১.৩ Reference Data Types
Reference Data Types হল সেই ডেটা টাইপ, যা একে অন্যের সাথে সম্পর্কিত (reference) ডেটা ধারণ করতে পারে। এর মধ্যে REF CURSOR অন্যতম।
- REF CURSOR: এটি একটি পয়েন্টার যা একটি SQL কিউরি থেকে রেকর্ডগুলি রেফারেন্স করতে পারে।
Syntax:
TYPE cursor_type IS REF CURSOR;উদাহরণ:
DECLARE v_cursor cursor_type; BEGIN OPEN v_cursor FOR SELECT * FROM employees; END;
২. PL/SQL অপারেটরস (Operators)
PL/SQL-এ অপারেটরগুলি ব্যবহার করে আপনি বিভিন্ন প্রকারের গণনা, তুলনা, এবং লজিক্যাল অপারেশন করতে পারেন। PL/SQL-এ প্রধান অপারেটরস হল:
২.১ Arithmetic Operators
এই অপারেটরগুলি গাণিতিক অপারেশন করতে ব্যবহৃত হয়।
- +: যোগফল
- -: বিয়োগফল
- *: গুণফল
- /: ভাগফল
- MOD: ভাগশেষ (মডুলাস)
উদাহরণ:
v_result := v_a + v_b; -- Addition
v_result := v_a - v_b; -- Subtraction
v_result := v_a * v_b; -- Multiplication
v_result := v_a / v_b; -- Division
v_result := v_a MOD v_b; -- Modulus (remainder)
২.২ Relational Operators
এই অপারেটরগুলি দুটি মানের মধ্যে তুলনা করতে ব্যবহৃত হয়।
- =: সমান
- <>: সমান নয় (NOT EQUAL)
- >: বড়
- <: ছোট
- >=: বড় অথবা সমান
- <=: ছোট অথবা সমান
উদাহরণ:
IF v_salary > 5000 THEN -- Greater than
DBMS_OUTPUT.PUT_LINE('High Salary');
END IF;
২.৩ Logical Operators
এই অপারেটরগুলি লজিক্যাল এক্সপ্রেশন মূল্যায়ন করতে ব্যবহৃত হয়।
- AND: দুটি শর্ত যদি সত্য হয়, তাহলে সত্য।
- OR: যদি একটিও শর্ত সত্য হয়, তাহলে সত্য।
- NOT: শর্তটি বিপরীত (Negation) করে।
উদাহরণ:
IF v_salary > 5000 AND v_age < 30 THEN -- Logical AND
DBMS_OUTPUT.PUT_LINE('Young high salary employee');
END IF;
২.৪ Concatenation Operator
PL/SQL-এ স্ট্রিং যোগ করার জন্য ব্যবহৃত অপারেটর হল ||।
উদাহরণ:
v_full_name := v_first_name || ' ' || v_last_name;
২.৫ Conditional Operators
এই অপারেটরগুলি শর্তভিত্তিক অপারেশন করতে ব্যবহৃত হয়।
- CASE: শর্তের উপর ভিত্তি করে বিভিন্ন অপশন নির্বাচন করতে ব্যবহৃত হয়।
- DECODE: একটি SQL ফাংশন যা নির্দিষ্ট মানের জন্য বিকল্প মান প্রদান করে।
উদাহরণ:
v_salary_level := CASE
WHEN v_salary > 5000 THEN 'High'
WHEN v_salary > 3000 THEN 'Medium'
ELSE 'Low'
END;
সারাংশ:
PL/SQL-এ ডেটা টাইপ এবং অপারেটরগুলি আপনাকে ডেটা ম্যানিপুলেশন, গণনা এবং লজিক্যাল অপারেশন করতে সাহায্য করে। ডেটা টাইপগুলি আপনাকে ডেটা ধরন নির্ধারণ করতে এবং অপারেটরগুলি আপনাকে সেই ডেটার উপর বিভিন্ন ধরণের অপারেশন (গণনা, তুলনা, যুক্তি) চালাতে সাহায্য করে। Properly using these operators and data types enhances the performance and readability of your PL/SQL programs.
PL/SQL-এ Scalar Data Types হল এমন ডেটা টাইপ যা একক (single) মান ধারণ করতে পারে। এটি সংখ্যা, স্ট্রিং, তারিখ, বা লজিক্যাল ভ্যালু হতে পারে। Scalar Data Types সাধারণত সংখ্যার জন্য NUMBER, টেক্সটের জন্য VARCHAR2, এবং তারিখ ও সময়ের জন্য DATE ব্যবহৃত হয়। এই টাইপগুলোকে সঠিকভাবে ব্যবহার করা PL/SQL-এ কার্যকারিতা এবং সঠিক ফলাফল অর্জনের জন্য অত্যন্ত গুরুত্বপূর্ণ।
১. NUMBER
NUMBER ডেটা টাইপটি সংখ্যা (Integer বা Floating Point) ধারণ করতে ব্যবহৃত হয়। এটি পূর্ণসংখ্যা (Integer) অথবা দশমিক (Decimal) সংখ্যা থাকতে পারে।
সংজ্ঞা:
- NUMBER(p,s)
p: Precision - মোট ডিজিটের সংখ্যা।s: Scale - দশমিক পয়েন্টের পরের ডিজিট সংখ্যা।
উদাহরণ:
NUMBER টাইপের ব্যবহার:
v_salary NUMBER; -- একে ব্যবহার করতে হবে একটি ভেরিয়েবল হিসেবে v_discount NUMBER(5,2); -- 5 ডিজিটের মধ্যে 2টি ডেসিমাল পয়েন্ট (যেমন 123.45) v_amount NUMBER(8,2); -- 8 ডিজিট, 2 ডেসিমাল পয়েন্টPrecision এবং Scale:
v_price NUMBER(6,2); -- সর্বোচ্চ 6 ডিজিটের মধ্যে 2টি ডেসিমাল (যেমন 12345.67) v_quantity NUMBER(3); -- 3 ডিজিটের সংখ্যা (যেমন 999)
গুরুত্বপূর্ণ পয়েন্ট:
- NUMBER টাইপ একটি নম্বর মান ধারণ করতে পারে যা পুরো সংখ্যাও হতে পারে এবং দশমিক সংখ্যাও হতে পারে।
- Precision (p) সর্বোচ্চ সংখ্যক ডিজিট এবং Scale (s) দশমিক স্থান নির্দেশ করে।
২. VARCHAR2
VARCHAR2 ডেটা টাইপটি স্ট্রিং (অক্ষরের সিকোয়েন্স) ধারণ করতে ব্যবহৃত হয়। এটি একটি পরিবর্তনশীল দৈর্ঘ্যের স্ট্রিং ধারণ করতে পারে, অর্থাৎ আপনি স্ট্রিংটির দৈর্ঘ্য নির্দিষ্ট করতে পারেন।
সংজ্ঞা:
- VARCHAR2(size)
size: এটি স্ট্রিংটির সর্বোচ্চ দৈর্ঘ্য নির্দেশ করে (ক্যারেক্টার হিসেবে)।
উদাহরণ:
VARCHAR2 টাইপের ব্যবহার:
v_name VARCHAR2(50); -- 50 ক্যারেক্টার পর্যন্ত নাম v_address VARCHAR2(200); -- 200 ক্যারেক্টার পর্যন্ত ঠিকানা v_email VARCHAR2(100); -- 100 ক্যারেক্টার পর্যন্ত ইমেল
গুরুত্বপূর্ণ পয়েন্ট:
- VARCHAR2 হল একটি পরিবর্তনশীল স্ট্রিং ডেটা টাইপ, যা স্ট্রিংয়ের দৈর্ঘ্য অনুযায়ী মেমরি ব্যবহার করে।
- CHAR ডেটা টাইপের তুলনায়, এটি মেমরি দক্ষ, কারণ এটি প্রয়োজন অনুযায়ী মেমরি বরাদ্দ করে।
৩. DATE
DATE ডেটা টাইপটি তারিখ এবং সময় সংরক্ষণ করতে ব্যবহৃত হয়। এতে বছরের, মাসের, দিনের সাথে ঘন্টা, মিনিট, সেকেন্ড পর্যন্ত তথ্য ধারণ করা যেতে পারে।
সংজ্ঞা:
- DATE
- এটি কোনও নির্দিষ্ট তারিখ এবং সময় সংরক্ষণ করে।
উদাহরণ:
DATE টাইপের ব্যবহার:
v_birthdate DATE; -- জন্ম তারিখ v_join_date DATE; -- চাকরি শুরু তারিখ v_current_date DATE := SYSDATE; -- বর্তমান তারিখ ও সময়
গুরুত্বপূর্ণ পয়েন্ট:
- DATE টাইপটি Oracle-এ তারিখ এবং সময়ের জন্য ব্যবহৃত হয়। এর মধ্যে YEAR, MONTH, DAY, HOUR, MINUTE, SECOND সব কিছু অন্তর্ভুক্ত থাকে।
SYSDATEফাংশনটি বর্তমান তারিখ এবং সময় রিটার্ন করে।
৪. BOOLEAN
BOOLEAN ডেটা টাইপটি TRUE অথবা FALSE মান ধারণ করতে ব্যবহৃত হয়। এটি সাধারণত লজিক্যাল সিদ্ধান্তে ব্যবহৃত হয়।
সংজ্ঞা:
- BOOLEAN
- এটি দুইটি মান ধারণ করতে পারে: TRUE অথবা FALSE।
উদাহরণ:
v_is_active BOOLEAN; -- TRUE বা FALSE হতে পারে
গুরুত্বপূর্ণ পয়েন্ট:
- BOOLEAN ডেটা টাইপ শুধুমাত্র TRUE, FALSE, অথবা
NULLহতে পারে।
৫. সংশ্লিষ্ট উদাহরণ
এখানে একটি উদাহরণ দেওয়া হলো যেখানে NUMBER, VARCHAR2, এবং DATE ডেটা টাইপের ভেরিয়েবল ব্যবহার করা হয়েছে:
DECLARE
v_employee_id NUMBER(6); -- Employee ID (6 ডিজিট)
v_employee_name VARCHAR2(50); -- Employee Name (50 ক্যারেক্টার)
v_salary NUMBER(8,2); -- Employee Salary (8 ডিজিট, 2 দশমিক পয়েন্ট)
v_hire_date DATE; -- Employee Hire Date
BEGIN
-- Variable assignments
v_employee_id := 1001;
v_employee_name := 'John Doe';
v_salary := 55000.75;
v_hire_date := TO_DATE('2024-05-01', 'YYYY-MM-DD');
-- Display output
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
DBMS_OUTPUT.PUT_LINE('Hire Date: ' || v_hire_date);
END;
এই উদাহরণে:
- v_employee_id হল একটি NUMBER ভেরিয়েবল যা ৬ ডিজিট পর্যন্ত ধারণ করতে পারে।
- v_employee_name হল একটি VARCHAR2 ভেরিয়েবল, যা ৫০ ক্যারেক্টার পর্যন্ত নাম ধারণ করতে পারে।
- v_salary একটি NUMBER ভেরিয়েবল যা ৮ ডিজিটের মধ্যে ২টি ডেসিমাল পয়েন্ট ধারণ করতে পারে।
- v_hire_date একটি DATE টাইপের ভেরিয়েবল, যা তারিখ এবং সময় সংরক্ষণ করে।
সারাংশ
PL/SQL-এর Scalar Data Types (যেমন NUMBER, VARCHAR2, DATE) হল ডেটা টাইপ যা একক মান ধারণ করতে সক্ষম। সঠিকভাবে এই টাইপগুলি ব্যবহার করলে আপনার প্রোগ্রামটি আরো কার্যকরী এবং নির্ভুল হবে।
সারাংশে:
- NUMBER সংখ্যার জন্য, Precision এবং Scale সহ ব্যবহৃত হয়।
- VARCHAR2 স্ট্রিংয়ের জন্য, যা পরিবর্তনশীল দৈর্ঘ্য ধারণ করতে পারে।
- DATE তারিখ এবং সময় সংরক্ষণের জন্য ব্যবহৃত হয়।
PL/SQL-এ Composite Data Types হল এমন ডেটা টাইপ যা একাধিক ভ্যালু ধারণ করতে পারে। এগুলি একাধিক ভেরিয়েবলকে একটি গ্রুপের মধ্যে সংরক্ষণ করতে সহায়ক। তিনটি প্রধান Composite Data Types হল: RECORD, TABLE, এবং VARRAY। এগুলি সম্পর্কে বিস্তারিত নিচে দেওয়া হল।
১. RECORD (রেকর্ড)
RECORD হল একটি user-defined composite data type, যা একাধিক ভেরিয়েবল (যা বিভিন্ন ডেটা টাইপের হতে পারে) একত্রে ধারণ করতে ব্যবহৃত হয়। এটি একটি অবজেক্টের মতো কাজ করে, যেখানে বিভিন্ন প্রপার্টি থাকে। রেকর্ড ব্যবহার করে, আপনি একাধিক মানকে একটি একক ডেটা টাইপে সংগ্রহ করতে পারেন।
রেকর্ড ডিক্লেয়ারেশন:
DECLARE
TYPE employee_record IS RECORD (
employee_id NUMBER(6),
employee_name VARCHAR2(50),
hire_date DATE
);
v_employee employee_record; -- Variable to store employee data
BEGIN
-- Assigning values to the record fields
v_employee.employee_id := 101;
v_employee.employee_name := 'John Doe';
v_employee.hire_date := TO_DATE('2020-01-15', 'YYYY-MM-DD');
-- Displaying the record fields
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee.employee_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee.employee_name);
DBMS_OUTPUT.PUT_LINE('Hire Date: ' || TO_CHAR(v_employee.hire_date, 'YYYY-MM-DD'));
END;
রেকর্ডের বৈশিষ্ট্য:
- আপনি একাধিক ভেরিয়েবলকে একটি রেকর্ডে সংরক্ষণ করতে পারেন।
- প্রতিটি ফিল্ডের ডেটা টাইপ আলাদা হতে পারে।
- রেকর্ডের ফিল্ডগুলি অ্যাক্সেস করতে
.(ডট) অপারেটর ব্যবহার করা হয়।
রেকর্ডের ব্যবহার:
- RECORD ব্যবহার করে, আপনি একাধিক সম্পর্কিত ডেটাকে একত্রিত করতে পারেন। যেমন, একজন কর্মচারীর আইডি, নাম এবং নিয়োগ তারিখকে একটি রেকর্ডে সংরক্ষণ করতে পারেন।
২. TABLE (টেবিল)
TABLE হল একটি nested table টাইপ, যা একাধিক মান (ডেটা) ধারণ করতে পারে। এটি একাধিক একক মান ধারণ করার জন্য ব্যবহৃত হয়। সাধারণত, যখন একটি ডেটা টাইপের একাধিক মান প্রয়োজন হয়, তখন TABLE ব্যবহার করা হয়।
টেবিল ডিক্লেয়ারেশন:
DECLARE
TYPE number_table IS TABLE OF NUMBER; -- Declaring a table of numbers
v_numbers number_table := number_table(10, 20, 30, 40, 50); -- Initializing with values
BEGIN
-- Accessing elements of the table
FOR i IN 1..v_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Number ' || i || ': ' || v_numbers(i));
END LOOP;
END;
টেবিলের বৈশিষ্ট্য:
- TABLE টাইপ একাধিক উপাদান ধারণ করতে সক্ষম।
- এটি indexed by integer (অথবা অন্য কোনো ধরনের কী) হতে পারে।
- TABLE এর মধ্যে মানগুলি একসাথে পরিচালনা করা যায়।
টেবিলের ব্যবহার:
- এটি ব্যবহার করে আপনি একটি ভেরিয়েবল, যা একটি সিরিজ বা তালিকা ধারণ করতে পারে, তৈরি করতে পারবেন।
- এটি বড় পরিমাণের ডেটা সংরক্ষণ এবং পরিচালনা করতে সহায়ক।
৩. VARRAY (ভ্যারিয়েবল অ্যারে)
VARRAY হল একটি fixed-size array, যা সীমিত সংখ্যক উপাদান ধারণ করতে সক্ষম। VARRAY এর মধ্যে উপাদানগুলি সাজানো থাকে এবং একটি নির্দিষ্ট সাইজ থাকতে হয়। এটি এমন ডেটার জন্য উপযুক্ত, যেখানে আপনি জানেন যে উপাদান সংখ্যা সীমিত এবং সেগুলি একটি নির্দিষ্ট সীমার মধ্যে থাকবে।
VARRAY ডিক্লেয়ারেশন:
DECLARE
TYPE number_varray IS VARRAY(5) OF NUMBER; -- Declaring a VARRAY of size 5
v_numbers number_varray := number_varray(1, 2, 3, 4, 5); -- Initializing with values
BEGIN
-- Accessing elements of the VARRAY
FOR i IN 1..v_numbers.LIMIT LOOP
DBMS_OUTPUT.PUT_LINE('Number ' || i || ': ' || v_numbers(i));
END LOOP;
END;
VARRAY এর বৈশিষ্ট্য:
- VARRAY হল একটি fixed-size array, যার মধ্যে উপাদান সংখ্যা নির্দিষ্ট থাকে।
- এটি INDEXED দ্বারা অ্যাক্সেস করা হয় (অর্থাৎ, ইন্ডেক্সের মাধ্যমে উপাদান পাওয়া যায়)।
- একটি VARRAY একসাথে একটি নির্দিষ্ট সাইজের উপাদান ধারণ করে এবং সাইজ পরিবর্তন করা যায় না।
VARRAY এর ব্যবহার:
- এটি ব্যবহার করা হয় যেখানে উপাদান সংখ্যা একটি নির্দিষ্ট সীমা পর্যন্ত থাকবে এবং তার উপর ভিত্তি করে ডেটা প্রসেস করা যাবে।
RECORD, TABLE, এবং VARRAY এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | RECORD | TABLE | VARRAY |
|---|---|---|---|
| ডেটা টাইপ | একাধিক ভেরিয়েবল মিশ্রিত ডেটা | একাধিক উপাদান ধারণকারী তালিকা | একাধিক উপাদান ধারণকারী অ্যারে |
| সাইজ | আনলিমিটেড (নির্দিষ্ট সীমা নেই) | অনির্দিষ্ট সাইজ (কাউন্ট ব্যবহার) | নির্দিষ্ট সাইজ (সীমাবদ্ধ) |
| ডেটা অ্যাক্সেস | . (ডট) অপারেটর দ্বারা | ইন্ডেক্স ব্যবহার করে | ইন্ডেক্স দ্বারা (যেমন: v_numbers(i)) |
| প্রধান ব্যবহার | সম্পর্কিত তথ্য সংরক্ষণ | একাধিক উপাদান ধারণ (ডায়নামিক) | সীমিত সংখ্যক উপাদান ধারণ |
| ডেটার ধরন | বিভিন্ন টাইপের ডেটা একত্রিত করা | এক ধরনের ডেটা (সমস্ত উপাদান একই টাইপের) | এক ধরনের ডেটা (সমস্ত উপাদান একই টাইপের) |
সারাংশ
PL/SQL এর Composite Data Types (RECORD, TABLE, এবং VARRAY) আপনাকে একাধিক ডেটা উপাদানকে একত্রে সংগঠিত করতে এবং সংরক্ষণ করতে সহায়ক করে। আপনি যদি একাধিক ভিন্ন ধরনের তথ্য (যেমন নাম, বয়স, ঠিকানা) সংরক্ষণ করতে চান, তবে RECORD ব্যবহার করবেন। যদি আপনাকে ডাইনামিক ডেটা তালিকা বা সেট তৈরি করতে হয়, তবে TABLE এবং যদি আপনাকে একটি নির্দিষ্ট সীমার মধ্যে অ্যারে তৈরি করতে হয়, তবে VARRAY ব্যবহার করতে হবে।
PL/SQL-এ Reference Data Types এবং Large Object (LOB) Data Types হল দুটি গুরুত্বপূর্ণ ডেটা টাইপ যা আপনাকে বিশেষ ধরনের ডেটা স্টোর এবং প্রসেস করতে সক্ষম করে। এদের ব্যবহারের মাধ্যমে আপনি বড় পরিসরের ডেটা এবং রেফারেন্স পয়েন্টারের মতো ধারণাগুলিকে দক্ষতার সাথে পরিচালনা করতে পারেন।
১. Reference Data Types (রেফারেন্স ডেটা টাইপ)
Reference Data Types হল এমন ডেটা টাইপ যা অন্য কোনো ডেটা টাইপ বা অবজেক্টের রেফারেন্স ধারণ করে। এর প্রধান উদাহরণ হল REF CURSOR, যা SQL কিউরি থেকে রেকর্ড রেফারেন্স করতে ব্যবহৃত হয়।
REF CURSOR
REF CURSOR একটি পয়েন্টার যা ডাইনামিকভাবে SQL কিউরি থেকে রেকর্ডগুলি রেফারেন্স করতে সক্ষম। এটি খুবই শক্তিশালী একটি কনসেপ্ট, কারণ এটি ব্যবহার করে আপনি একাধিক SQL কিউরি চালাতে এবং ডেটা কাস্টমাইজডভাবে প্রক্রিয়া করতে পারেন।
সিনট্যাক্স:
TYPE cursor_type IS REF CURSOR;
এটি সাধারণত Implicit Cursor বা Explicit Cursor হিসেবে ব্যবহৃত হতে পারে, তবে REF CURSOR-এর প্রধান সুবিধা হল এটি সার্ভার সাইডে ডাইনামিক কিউরি প্রক্রিয়া চালাতে সাহায্য করে।
REF CURSOR ব্যবহার উদাহরণ:
DECLARE
TYPE cursor_type IS REF CURSOR; -- Declare REF CURSOR type
v_cursor cursor_type; -- Declare a cursor variable
v_employee_name VARCHAR2(50); -- Variable to store employee name
BEGIN
-- Open the cursor for a dynamic SQL query
OPEN v_cursor FOR
SELECT employee_name
FROM employees
WHERE department_id = 10;
-- Fetch and display the employee names from the cursor
LOOP
FETCH v_cursor INTO v_employee_name;
EXIT WHEN v_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_employee_name);
END LOOP;
-- Close the cursor
CLOSE v_cursor;
END;
এখানে REF CURSOR ব্যবহার করা হয়েছে, যেখানে v_cursor একটি পয়েন্টার যা একটি কিউরি থেকে রেকর্ড ধারণ করে। এরপর ডেটা ফেচ করা হয়েছে এবং পরবর্তীতে কনসোলে আউটপুট দেওয়া হয়েছে।
২. Large Object (LOB) Data Types (লार্জ অবজেক্ট ডেটা টাইপ)
Large Object (LOB) ডেটা টাইপগুলি প্রধানত বড় আকারের ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, যেমন ইমেজ, অডিও, ভিডিও, বা বড় টেক্সট ফাইল। LOB টাইপগুলি আপনাকে ব্লব (Binary Large Object), ক্লব (Character Large Object), এবং আউটপুট স্ট্রিমের মতো ডেটা সংরক্ষণ করতে সক্ষম করে। PL/SQL-এ LOB ডেটা টাইপের মধ্যে কিছু মূল টাইপ রয়েছে:
প্রধান LOB ডেটা টাইপগুলি:
BLOB (Binary Large Object)
BLOB ডেটা টাইপটি বাইনারি ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন ছবি, অডিও ফাইল, ভিডিও, অথবা অন্যান্য বড় আকারের বাইনারি ডেটা।সিনট্যাক্স:
v_blob BLOB;CLOB (Character Large Object)
CLOB ডেটা টাইপটি বড় আকারের টেক্সট ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি সাধারণত বড় টেক্সট ডকুমেন্ট বা XML ফাইল সংরক্ষণের জন্য ব্যবহৃত হয়।সিনট্যাক্স:
v_clob CLOB;NCLOB (National Character Large Object)
NCLOB ডেটা টাইপটি বৈশ্বিক ভাষায় টেক্সট ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন Unicode কনটেন্ট।সিনট্যাক্স:
v_nclob NCLOB;BFILE (Binary File)
BFILE ডেটা টাইপটি বাইনারি ফাইল সিস্টেমের ফাইল পাথগুলি সংরক্ষণ করতে ব্যবহৃত হয়। এটি সরাসরি ডেটাবেসে সংরক্ষণ না করে বাইনারি ফাইলের লিঙ্ক সংরক্ষণ করে।সিনট্যাক্স:
v_bfile BFILE;
LOB ডেটা টাইপ ব্যবহারের উদাহরণ:
DECLARE
v_blob BLOB; -- Declare a BLOB variable for binary data
v_clob CLOB; -- Declare a CLOB variable for character data
BEGIN
-- Initialize the BLOB and CLOB variables
DBMS_LOB.CREATETEMPORARY(v_blob, TRUE); -- Create temporary BLOB
DBMS_LOB.CREATETEMPORARY(v_clob, TRUE); -- Create temporary CLOB
-- Write binary data to BLOB (example for image or file)
DBMS_LOB.WRITE(v_blob, LENGTH('sample_binary_data'), 1, 'sample_binary_data');
-- Write text data to CLOB (example for long text)
DBMS_LOB.WRITE(v_clob, LENGTH('sample_long_text'), 1, 'sample_long_text');
-- Optionally, you can also read LOB data using DBMS_LOB.READ
DBMS_OUTPUT.PUT_LINE('BLOB Data: ' || DBMS_LOB.SUBSTR(v_blob, 10, 1));
DBMS_OUTPUT.PUT_LINE('CLOB Data: ' || DBMS_LOB.SUBSTR(v_clob, 10, 1));
END;
এখানে, BLOB এবং CLOB ভেরিয়েবল তৈরি করা হয়েছে এবং সেগুলিতে বাইনারি এবং টেক্সট ডেটা সংরক্ষণের জন্য DBMS_LOB প্যাকেজ ব্যবহার করা হয়েছে। LOB ডেটা টাইপের জন্য DBMS_LOB.CREATETEMPORARY ফাংশনটি ব্যবহার করে অস্থায়ী LOB তৈরি করা হয়।
LOB ডেটা টাইপের প্রধান বৈশিষ্ট্য:
- বড় আকারের ডেটা সংরক্ষণ: LOB ডেটা টাইপগুলি বড় আকারের ডেটা (যেমন ইমেজ, ভিডিও, অডিও, টেক্সট ফাইল) সংরক্ষণ করতে সহায়ক।
- প্রসেসিং: LOB ডেটা টাইপগুলির জন্য Oracle বিভিন্ন ফাংশন এবং প্যাকেজ সরবরাহ করে যেমন
DBMS_LOB, যার মাধ্যমে আপনি LOB ডেটা তৈরি, পড়া, এবং লিখতে পারেন। - ডেটা সংগ্রহ: LOB ডেটা টাইপগুলি ডেটাবেসে সংরক্ষিত হলেও সেগুলিকে প্রক্রিয়া এবং ম্যানিপুলেট করতে SQL ব্যবহার করা যেতে পারে।
সারাংশ:
- Reference Data Types: এই টাইপগুলো ডেটার রেফারেন্স বা পয়েন্টার হিসাবে কাজ করে।
REF CURSORহল এর একটি উদাহরণ, যা ডাইনামিক SQL কিউরি থেকে ডেটা রেফারেন্স করতে ব্যবহৃত হয়। - Large Object (LOB) Data Types: LOB ডেটা টাইপগুলি বড় আকারের ডেটা (যেমন বাইনারি বা টেক্সট ডেটা) সংরক্ষণ করতে ব্যবহৃত হয়, এবং এগুলির মধ্যে
BLOB,CLOB,NCLOB, এবংBFILEঅন্তর্ভুক্ত থাকে।
এই ডেটা টাইপগুলি PL/SQL-এ বিশেষভাবে ব্যবহার করা হয় যখন আপনার প্রোগ্রামে বড় আকারের ডেটা এবং ডাইনামিক রেফারেন্স প্রক্রিয়াগুলির প্রয়োজন হয়।
PL/SQL-এর Operators হল অপারেশনগুলির সেট যা ডেটা মানগুলির উপর কাজ করে, এবং এগুলি ডেটা প্রসেসিংয়ের জন্য খুবই গুরুত্বপূর্ণ। PL/SQL-এ তিনটি প্রধান ধরনের অপারেটর ব্যবহৃত হয়:
- Arithmetic Operators
- Relational Operators
- Logical Operators
এগুলো ব্যবহার করে আপনি বিভিন্ন ধরণের গাণিতিক, তুলনামূলক এবং লজিক্যাল অপারেশন সম্পাদন করতে পারেন।
১. Arithmetic Operators (গাণিতিক অপারেটর)
Arithmetic operators ব্যবহার করা হয় গাণিতিক হিসাব-নিকাশের জন্য। এটি দুইটি বা তার বেশি সংখ্যার মধ্যে গাণিতিক কাজ করে, যেমন যোগফল, বিয়োগফল, গুণফল, ভাগফল ইত্যাদি।
পূর্ববর্তী গাণিতিক অপারেটরসমূহ:
+: যোগফল (Addition)-: বিয়োগফল (Subtraction)*: গুণফল (Multiplication)/: ভাগফল (Division)MOD: ভাগফলে বাকী (Modulus, অর্থাৎ ভাগের পর অবশিষ্ট)
উদাহরণ:
DECLARE
v_a NUMBER := 10;
v_b NUMBER := 5;
v_result NUMBER;
BEGIN
v_result := v_a + v_b; -- Addition
DBMS_OUTPUT.PUT_LINE('Addition: ' || v_result);
v_result := v_a - v_b; -- Subtraction
DBMS_OUTPUT.PUT_LINE('Subtraction: ' || v_result);
v_result := v_a * v_b; -- Multiplication
DBMS_OUTPUT.PUT_LINE('Multiplication: ' || v_result);
v_result := v_a / v_b; -- Division
DBMS_OUTPUT.PUT_LINE('Division: ' || v_result);
v_result := MOD(v_a, v_b); -- Modulus
DBMS_OUTPUT.PUT_LINE('Modulus: ' || v_result);
END;
এই কোডে:
v_a + v_bযোগফলv_a - v_bবিয়োগফলv_a * v_bগুণফলv_a / v_bভাগফলMOD(v_a, v_b)মডুলাস অপারেশন দেখানো হয়েছে।
২. Relational Operators (তুলনামূলক অপারেটর)
Relational operators (তুলনামূলক অপারেটর) ডেটা মানের মধ্যে সম্পর্ক বা তুলনা তৈরি করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি দুটি মানের মধ্যে তুলনা করতে পারেন এবং একটি বুলিয়ান ফলাফল (TRUE বা FALSE) পাবেন। এটি সাধারণত IF স্টেটমেন্টে বা কন্ডিশনাল লজিকে ব্যবহৃত হয়।
প্রধান তুলনামূলক অপারেটরসমূহ:
=: সমান (Equal to)!=বা<>: সমান না (Not equal to)>: বড় (Greater than)<: ছোট (Less than)>=: বড় বা সমান (Greater than or equal to)<=: ছোট বা সমান (Less than or equal to)
উদাহরণ:
DECLARE
v_a NUMBER := 10;
v_b NUMBER := 5;
BEGIN
IF v_a > v_b THEN
DBMS_OUTPUT.PUT_LINE('v_a is greater than v_b');
ELSE
DBMS_OUTPUT.PUT_LINE('v_a is not greater than v_b');
END IF;
IF v_a != v_b THEN
DBMS_OUTPUT.PUT_LINE('v_a is not equal to v_b');
END IF;
IF v_a = 10 THEN
DBMS_OUTPUT.PUT_LINE('v_a is equal to 10');
END IF;
END;
এই কোডে:
v_a > v_bতুলনা করে যেv_aবড় কি নাv_bথেকে।v_a != v_bচেক করে যে দুটি মান সমান না।v_a = 10চেক করে যেv_aএর মান ১০।
৩. Logical Operators (লজিক্যাল অপারেটর)
Logical operators ব্যবহার করা হয় একাধিক শর্তের উপর যৌথ লজিক্যাল পরীক্ষার জন্য। এটি সাধারণত AND, OR, NOT অপারেটর ব্যবহার করে কন্ডিশনাল পরীক্ষা চালাতে সহায়ক হয়।
প্রধান লজিক্যাল অপারেটরসমূহ:
AND: দুটি শর্ত যদি উভয়ই সত্য হয় তবে ফলাফল সত্য (True)।OR: দুটি শর্তের মধ্যে যেকোনো একটি সত্য হলে ফলাফল সত্য (True)।NOT: শর্তটির বিপরীত ফলাফল প্রদান করে। (যদি শর্ত সত্য হয় তবে এটি মিথ্যা এবং যদি মিথ্যা হয় তবে এটি সত্য হয়)।
উদাহরণ:
DECLARE
v_a NUMBER := 10;
v_b NUMBER := 5;
v_c NUMBER := 20;
BEGIN
IF v_a > v_b AND v_c > v_a THEN
DBMS_OUTPUT.PUT_LINE('Both conditions are true');
END IF;
IF v_a < v_b OR v_a = 10 THEN
DBMS_OUTPUT.PUT_LINE('At least one condition is true');
END IF;
IF NOT (v_a < v_b) THEN
DBMS_OUTPUT.PUT_LINE('The condition is false');
END IF;
END;
এই কোডে:
AND:v_a > v_b AND v_c > v_aচেক করে যে দুটি শর্ত উভয়ই সত্য কি না।OR:v_a < v_b OR v_a = 10চেক করে যে কোনো একটি শর্ত সত্য কি না।NOT:NOT (v_a < v_b)শর্তটির বিপরীত ফলাফল দেয়।
সারাংশ:
PL/SQL-এ গাণিতিক, তুলনামূলক এবং লজিক্যাল অপারেটরগুলির মাধ্যমে আপনি ডেটা মূল্যায়ন, তুলনা এবং বিভিন্ন ধরণের শর্তাবলীর উপর ভিত্তি করে প্রোগ্রাম তৈরি করতে পারেন। এর মাধ্যমে আপনি আপনার প্রোগ্রামের কার্যকারিতা বৃদ্ধি করতে পারেন এবং ডেটা প্রসেসিংকে আরও শক্তিশালী করতে পারেন।
Read more