Static এবং Dynamic Cursors এর ব্যবহার

Cursors এবং তাদের ব্যবহার - টি-এসকিউএল (T-SQL) - Database Tutorials

320

Cursors হল SQL Server-এ এমন একটি ডেটা অবজেক্ট যা একাধিক রেকর্ডের উপর ইটারেট (iterate) করার জন্য ব্যবহৃত হয়। সাধারণত, যখন আপনি একাধিক রেকর্ডের উপর অপারেশন করতে চান, যেমন আপডেট বা ডিলিট, তখন Cursor ব্যবহার করা হয়।

SQL Server-এ বিভিন্ন ধরনের cursors রয়েছে, তার মধ্যে Static এবং Dynamic হল দুটি জনপ্রিয় ধরনের cursor। এই দুই ধরনের cursor বিভিন্ন প্রয়োজনে ব্যবহার করা হয়, এবং তাদের নিজস্ব বৈশিষ্ট্য এবং সীমাবদ্ধতা রয়েছে।


১. Static Cursor

Static Cursor হল একটি ধরনের cursor যা ডেটাবেসের একটি নির্দিষ্ট মুহূর্তে টেবিল বা কুয়েরি থেকে ডেটা একটি স্ট্যাটিক (স্থির) কপি তৈরি করে। এটি ডেটার উপর ইটারেট করার সময় টেবিলের সাথে কোনো পরিবর্তন (যেমন INSERT, UPDATE, DELETE) ঘটলে সেই পরিবর্তনগুলি কীভাবে প্রতিফলিত হয় না

Static Cursor এর বৈশিষ্ট্য:

  • এটি একবার ডেটা ক্যাশ (cache) করে, তারপর ডেটার সাথে কোনো পরিবর্তন হলে তা প্রতিফলিত হয় না।
  • READ_ONLY অপারেশনগুলির জন্য উপযুক্ত।
  • ডেটার উপর নির্দিষ্ট অ্যাকশন যেমন এক্সট্রা ডেটা পরিবর্তন করা বা তথ্য থেকে ইনসার্ট করা সম্ভব নয়।
  • সিস্টেম রিসোর্স কম ব্যবহার করে কারণ এটি ডেটার কপি তৈরি করে এবং পরবর্তীতে সেই কপি থেকেই ডেটা নিয়ে কাজ করে।

Static Cursor তৈরি করা:

DECLARE @EmployeeID INT, @EmployeeName NVARCHAR(100);

DECLARE EmployeeCursor STATIC CURSOR FOR
SELECT EmployeeID, Name FROM Employees;

OPEN EmployeeCursor;

FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'EmployeeID: ' + CAST(@EmployeeID AS NVARCHAR) + ', Name: ' + @EmployeeName;
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;
END

CLOSE EmployeeCursor;
DEALLOCATE EmployeeCursor;

এখানে:

  • STATIC টাইপের cursor ব্যবহার করা হয়েছে।
  • কুয়েরি থেকে সমস্ত কর্মী আইডি এবং নামের কপি তৈরি হয়েছে এবং সেগুলোর উপর ইটারেট করা হচ্ছে।

২. Dynamic Cursor

Dynamic Cursor হল একটি ধরনের cursor যা ডেটাবেসের সাথে ক্রমাগত সিঙ্ক্রোনাইজ থাকে। অর্থাৎ, এটি যখন টেবিল বা কুয়েরির উপর কাজ করে, তখন কোনো পরিবর্তন (যেমন INSERT, UPDATE, DELETE) ঘটলে সেই পরিবর্তনগুলো কনটিনিউয়াসলি প্রতিফলিত হয়।

Dynamic Cursor এর বৈশিষ্ট্য:

  • এটি real-time ডেটার সাথে কাজ করে এবং টেবিলের পরিবর্তনগুলো দেখায়।
  • INSERT, UPDATE, DELETE অপারেশনগুলির মাধ্যমে ডেটা পরিবর্তন করলে, সেই পরিবর্তনগুলি অবিলম্বে cursor-এ প্রতিফলিত হয়।
  • এটি বেশিরভাগ ক্ষেত্রে বেশি রিসোর্স ব্যবহার করে, কারণ এটি সার্ভারের ডেটা পরিবর্তনের সাথে সিঙ্ক্রোনাইজ থাকে।
  • এটি READ_WRITE অপারেশনগুলি (তথ্য আপডেট বা মুছে ফেলা) সমর্থন করে।

Dynamic Cursor তৈরি করা:

DECLARE @EmployeeID INT, @EmployeeName NVARCHAR(100);

DECLARE EmployeeCursor DYNAMIC CURSOR FOR
SELECT EmployeeID, Name FROM Employees;

OPEN EmployeeCursor;

FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'EmployeeID: ' + CAST(@EmployeeID AS NVARCHAR) + ', Name: ' + @EmployeeName;
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;
END

CLOSE EmployeeCursor;
DEALLOCATE EmployeeCursor;

এখানে:

  • DYNAMIC টাইপের cursor ব্যবহার করা হয়েছে।
  • টেবিলের ডেটার সাথে সিঙ্ক্রোনাইজড থেকে আপডেট, ইনসার্ট এবং ডিলিট পরিবর্তনগুলোকে ট্র্যাক করে ইটারেট করা হচ্ছে।

Static এবং Dynamic Cursors এর মধ্যে পার্থক্য

বৈশিষ্ট্যStatic CursorDynamic Cursor
ডেটার আপডেটএকবার ডেটা ক্যাশ করে, পরবর্তীতে কোনো পরিবর্তন প্রতিফলিত হয় না।ডেটাবেসে হওয়া কোনো পরিবর্তন তাত্ক্ষণিকভাবে প্রতিফলিত হয়।
পারফরম্যান্সসাধারণত দ্রুত, কারণ এটি ডেটার স্থির কপি ব্যবহার করে।সিস্টেম রিসোর্স বেশি ব্যবহার করে কারণ এটি ডেটাবেসের সাথে সিঙ্ক্রোনাইজ থাকে।
ব্যবহারযোগ্যতাসাধারণত READ_ONLY অপারেশনগুলির জন্য ব্যবহার হয়।READ_WRITE অপারেশন (INSERT, UPDATE, DELETE) সমর্থন করে।
ডেটার সিঙ্ক্রোনাইজেশনডেটা পরিবর্তন হলে তা প্রতিফলিত হয় না।ডেটা পরিবর্তন হলে তা সিঙ্ক্রোনাইজ হয়ে যায়।

কেন কোনটি ব্যবহার করবেন?

  • Static Cursor: আপনি যদি ডেটাবেসের উপর শুধু READ_ONLY অপারেশন করতে চান এবং ডেটার স্থির কপি ব্যবহার করে দ্রুত ফলাফল চান, তবে Static Cursor ব্যবহার করা শ্রেয়। উদাহরণস্বরূপ, যদি আপনি একবার ডেটা নিয়ে সেটির উপর কাজ করতে চান এবং পরবর্তীতে কোনো পরিবর্তন না চান।
  • Dynamic Cursor: আপনি যদি READ_WRITE অপারেশন করতে চান এবং ডেটার উপর পরিবর্তন বা আপডেট করতে চান, এবং আপনি চান যে ডেটাবেসের পরিবর্তন গুলি অবিলম্বে cursor-এ প্রতিফলিত হোক, তবে Dynamic Cursor ব্যবহার করুন। এটি সাধারণত বেশি রিসোর্স ব্যবহার করে, কিন্তু এটি ডেটাবেসের পরিবর্তনগুলির সাথে সিঙ্ক্রোনাইজ থাকে।

সারাংশ:

  • Static Cursors একটি স্থির কপি তৈরি করে এবং ডেটার মধ্যে কোনো পরিবর্তন প্রতিফলিত হয় না।
  • Dynamic Cursors ডেটাবেসের সাথে ক্রমাগত সিঙ্ক্রোনাইজ থাকে এবং কোনো পরিবর্তন হলে তা অবিলম্বে প্রতিফলিত হয়।
  • Static Cursor বেশি পারফরম্যান্স এবং কম রিসোর্স ব্যবহার করে, তবে Dynamic Cursor অধিক রিসোর্স ব্যবহার করে এবং ডেটার সঠিক অবস্থায় কাজ করতে সহায়তা করে।
Content added By
Promotion

Are you sure to start over?

Loading...