Collections এর সাথে Bulk Operations

Bulk Operations এবং Performance টিউনিং - পিএল/এসকিউএল (PL/SQL) - Database Tutorials

415

Collections হল একটি ধরনের ডেটা স্ট্রাকচার যা একাধিক মান (value) ধারণ করতে পারে। PL/SQL-এ Collections ব্যবহৃত হয় যাতে একাধিক ডেটা আইটেম একসাথে রাখা যায় এবং কার্যকরভাবে প্রক্রিয়া করা যায়। Collections প্রধানত তিনটি ধরনের হয়ে থাকে:

  1. Associative Arrays (Index-By Tables)
  2. Nested Tables
  3. Varrays (Variable-size arrays)

এগুলির সাথে সম্পর্কিত একটি গুরুত্বপূর্ণ কনসেপ্ট হল Bulk Operations, যা নগণ্য পরিমাণ ডেটা একসাথে প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Bulk Operations আপনাকে একাধিক রেকর্ডকে একসাথে প্রক্রিয়া করার সুবিধা দেয়, যেটি সাধারণ লুপ ব্যবহার করার চেয়ে অনেক দ্রুত এবং কার্যকর।


PL/SQL Collections: প্রকার

1. Associative Arrays (Index-By Tables)

  • Associative Arrays হল একটি বিশেষ ধরনের অ্যারে যা ইন্ডেক্স হিসেবে স্ট্রিং বা পজিটিভ ইন্টিজার ব্যবহার করে। এগুলি মূলত ডাইনামিক অ্যারে হিসেবে কাজ করে।
  • এগুলি ডেটাবেস টেবিল এর মতো কাজ করে এবং ব্যবহারকারীর প্রয়োজন অনুসারে ডেটার সংখ্যা পরিবর্তন করা যায়।

উদাহরণ:

DECLARE
   TYPE emp_array IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
   emp_details emp_array;
BEGIN
   SELECT * INTO emp_details(1)
   FROM employees
   WHERE employee_id = 100;
   DBMS_OUTPUT.PUT_LINE(emp_details(1).first_name);
END;

2. Nested Tables

  • Nested Tables হল এমন একটি কলেকশন টাইপ যা টেবিলের মতো কাজ করে এবং অন্যান্য টেবিলের মধ্যে ইনসার্ট করা যায়।
  • Nested Table ব্যবহার করলে আপনি প্রতিটি আইটেম আলাদা আলাদা হিসেবে প্রক্রিয়া করতে পারেন, এবং এটা ডেটাবেসে টেবিলের মতো কাজ করে।

উদাহরণ:

DECLARE
   TYPE emp_table IS TABLE OF employees%ROWTYPE;
   emp_details emp_table;
BEGIN
   SELECT * BULK COLLECT INTO emp_details
   FROM employees
   WHERE department_id = 10;
   FOR i IN 1 .. emp_details.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(emp_details(i).first_name);
   END LOOP;
END;

3. Varrays (Variable-size Arrays)

  • Varrays হল একটি অফিসিয়াল অ্যারে টাইপ, যার আকার একটি নির্দিষ্ট সীমা পর্যন্ত স্থির থাকে। এই ধরনের অ্যারে আপনাকে একটি সীমিত সংখ্যা ডেটা ধারণ করতে সাহায্য করে।
  • এগুলি ডাইনামিক অ্যারে এর মতো কাজ করে তবে ফিক্সড সাইজ এর সুবিধা প্রদান করে।

উদাহরণ:

DECLARE
   TYPE num_array IS VARRAY(10) OF NUMBER;
   numbers num_array := num_array(10, 20, 30);
BEGIN
   FOR i IN 1 .. numbers.LAST LOOP
      DBMS_OUTPUT.PUT_LINE(numbers(i));
   END LOOP;
END;

PL/SQL Bulk Operations

PL/SQL-এ Bulk Operations ব্যবহার করে আপনি একাধিক ডেটাকে একই সাথে প্রক্রিয়া করতে পারেন, যা পারফরম্যান্সের জন্য গুরুত্বপূর্ণ। এটি BULK COLLECT এবং FORALL এর মাধ্যমে সম্ভব হয়।

1. BULK COLLECT

BULK COLLECT আপনাকে একাধিক রেকর্ড একসাথে সংগ্রহ (fetch) করার জন্য ব্যবহৃত হয়। এটি সাধারণত SELECT স্টেটমেন্টের সাথে ব্যবহার করা হয় এবং একই সময়ে অনেক রেকর্ড প্রাপ্ত করার মাধ্যমে কোডের কার্যকারিতা বৃদ্ধি করে।

সিনট্যাক্স:

SELECT column_name BULK COLLECT INTO collection_name
FROM table_name
WHERE condition;

উদাহরণ:

DECLARE
   TYPE emp_table IS TABLE OF employees%ROWTYPE;
   emp_details emp_table;
BEGIN
   SELECT * BULK COLLECT INTO emp_details
   FROM employees
   WHERE department_id = 10;

   FOR i IN 1 .. emp_details.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(emp_details(i).first_name);
   END LOOP;
END;

এখানে, BULK COLLECT ব্যবহার করে আমরা একসাথে সমস্ত কর্মচারীর ডেটা emp_details কলে সন্নিবেশিত করেছি, যা লুপের মাধ্যমে প্রদর্শন করা হয়েছে।


2. FORALL

FORALL হল একটি অপারেটর যা একসাথে অনেক DML (Data Manipulation Language) অপারেশন করতে ব্যবহৃত হয়। এটি INSERT, UPDATE, বা DELETE অপারেশনকে একত্রে একাধিক রেকর্ড এর উপর কার্যকর করতে সাহায্য করে, যা পারফরম্যান্সের জন্য অনেক উপকারী।

সিনট্যাক্স:

FORALL index IN lower_bound..upper_bound
   DML_statement;

উদাহরণ:

DECLARE
   TYPE emp_array IS TABLE OF employees%ROWTYPE;
   emp_details emp_array;
BEGIN
   SELECT * BULK COLLECT INTO emp_details
   FROM employees
   WHERE department_id = 10;

   FORALL i IN 1 .. emp_details.COUNT
      UPDATE employees
      SET salary = salary * 1.10
      WHERE employee_id = emp_details(i).employee_id;
END;

এখানে, আমরা BULK COLLECT এর মাধ্যমে emp_details অ্যারেতে ডেটা সংগ্রহ করেছি এবং তারপরে FORALL ব্যবহার করে একসাথে সমস্ত কর্মচারীর বেতন আপডেট করেছি।


Bulk Operations এর সুবিধা

  • পারফরম্যান্স বৃদ্ধি: সাধারণ লুপের চেয়ে Bulk Operations অনেক দ্রুত কাজ করে, কারণ এটি একাধিক ডেটা একসাথে প্রক্রিয়া করে।
  • কোডের সহজতা: Bulk Operations আপনাকে কম কোড লিখে বৃহৎ পরিমাণ ডেটা প্রসেস করার সুযোগ দেয়।
  • কম CPU এবং I/O খরচ: একাধিক রেকর্ড প্রসেস করা হয়ে থাকে একাধিক আলাদা স্টেটমেন্টের পরিবর্তে একক স্টেটমেন্টে, যা CPU এবং I/O খরচ কমাতে সাহায্য করে।

Bulk Operations এর সঠিক ব্যবহার

  1. Memory Management: যেহেতু Bulk Collect একসাথে অনেক ডেটা একত্র করে, তাই খুব বেশি ডেটা সংগ্রহ করার সময় এটি OUT OF MEMORY এর সমস্যা সৃষ্টি করতে পারে। তাই ডেটা সংগ্রহের পরিমাণ নিয়ন্ত্রণ করা গুরুত্বপূর্ণ।
  2. Error Handling: Bulk Operations-এ যখন একাধিক রেকর্ড প্রক্রিয়া করা হয়, তখন একটি ত্রুটি ঘটলে তা পুরো ব্যাচের উপর প্রভাব ফেলতে পারে। SAVE EXCEPTIONS ব্যবহার করে কিছু ত্রুটি এড়ানো যেতে পারে।

    উদাহরণ:

    DECLARE
       TYPE emp_array IS TABLE OF employees%ROWTYPE;
       emp_details emp_array;
       PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
       SELECT * BULK COLLECT INTO emp_details
       FROM employees;
    
       FORALL i IN 1 .. emp_details.COUNT
          UPDATE employees
          SET salary = salary + 500
          WHERE employee_id = emp_details(i).employee_id;
    
       COMMIT;
    END;
    

উপসংহার

PL/SQL এ Collections এবং Bulk Operations ডেটাবেসের সাথে কার্যকরভাবে কাজ করার জন্য একটি শক্তিশালী টুল। Associative Arrays, Nested Tables, এবং Varrays দিয়ে একাধিক ডেটা সংগ্রহ এবং প্রক্রিয়া করার মাধ্যমে আপনার অ্যাপ্লিকেশন এর পারফরম্যান্স অনেক উন্নত করা যেতে পারে। BULK COLLECT এবং FORALL এর মাধ্যমে আপনি অনেক দ্রুত ডেটাবেস অপারেশন করতে পারবেন, যা উচ্চমানের কর্মক্ষমতা এবং দক্ষতা প্রদান করবে।

Content added By
Promotion

Are you sure to start over?

Loading...