Database Tutorials T-SQL এ CURSOR এর ব্যবহার গাইড ও নোট

304

CURSOR T-SQL-এ একটি শক্তিশালী বৈশিষ্ট্য যা একাধিক রেকর্ডের মধ্যে লুপ করার জন্য ব্যবহৃত হয়। সাধারণত, যখন আপনি একাধিক রেকর্ড প্রক্রিয়া করতে চান এবং প্রতিটি রেকর্ডে কিছু নির্দিষ্ট কাজ করতে চান, তখন CURSOR ব্যবহৃত হয়। যদিও CURSOR খুবই কার্যকর, তবে এটি অন্যান্য পদ্ধতির তুলনায় পারফরম্যান্সে একটু স্লো হতে পারে, বিশেষত যখন অনেক রেকর্ড থাকে। তবে কিছু ক্ষেত্রে এটি খুবই দরকারি হয়ে থাকে, যেখানে একাধিক রেকর্ডের মধ্যে লজিক্যাল অপারেশন প্রয়োজন।

CURSOR কী?

CURSOR একটি টেম্পোরারি অ্যাবজেক্ট যা SELECT কুয়েরির মাধ্যমে রেকর্ডের একটি集合 (set) ধরে রাখে। এটি ঐ集合ের প্রতিটি রেকর্ডে একে একে অপারেশন বা প্রক্রিয়া করতে সহায়তা করে।

CURSOR ব্যবহারের প্রক্রিয়া

T-SQL এ CURSOR ব্যবহারের জন্য কয়েকটি প্রধান ধাপ রয়েছে:

  1. DECLARE: CURSOR ঘোষণা করা
  2. OPEN: CURSOR খোলা
  3. FETCH: CURSOR থেকে রেকর্ড নেয়া
  4. CLOSE: CURSOR বন্ধ করা
  5. DEALLOCATE: CURSOR মেমোরি থেকে মুক্ত করা

১. CURSOR DECLARE এবং OPEN

CURSOR ব্যবহার শুরু করার জন্য প্রথমে তার ডেটা সোর্স বা টেবিল থেকে SELECT কুয়েরি ব্যবহার করে CURSOR ডিক্লেয়ার করা হয় এবং তারপর সেটি ওপেন করা হয়।

উদাহরণ:

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

DECLARE EmployeeCursor CURSOR FOR
SELECT EmployeeID, Name FROM Employees;

OPEN EmployeeCursor;
  • DECLARE: EmployeeCursor নামে একটি CURSOR ডিক্লেয়ার করা হয়েছে, যা Employees টেবিল থেকে EmployeeID এবং Name কলাম নিয়ে আসে।
  • OPEN: CURSOR চালু করা হয়েছে যাতে এটি রেকর্ডগুলো ধরে রাখতে পারে।

২. FETCH

FETCH স্টেটমেন্টের মাধ্যমে CURSOR থেকে একে একে রেকর্ড নেয়া হয়। প্রতিবার FETCH করার পর CURSOR পরবর্তী রেকর্ডে চলে যায়।

উদাহরণ:

FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;
  • এই স্টেটমেন্টটি প্রথম রেকর্ডটি FETCH করবে এবং তা @EmployeeID এবং @EmployeeName ভেরিয়েবলগুলোতে সংরক্ষণ করবে।

৩. LOOP ব্যবহার

এখন CURSORের মধ্যে প্রতিটি রেকর্ডে লুপ চলবে এবং আপনি যে কোনো প্রক্রিয়া বা লজিক প্রয়োগ করতে পারবেন। এটি সাধারণত WHILE লুপের মাধ্যমে সম্পন্ন হয়।

উদাহরণ:

WHILE @@FETCH_STATUS = 0
BEGIN
    -- রেকর্ড প্রসেসিং
    PRINT 'EmployeeID: ' + CAST(@EmployeeID AS VARCHAR) + ', Name: ' + @EmployeeName;

    -- পরবর্তী রেকর্ডে ফেচ করা
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;
END
  • @@FETCH_STATUS একটি সিস্টেম ফাংশন যা বর্তমান FETCH স্টেটমেন্টের সফলতার স্ট্যাটাস রিটার্ন করে। এটি 0 রিটার্ন করলে অর্থাৎ রেকর্ড পাওয়া গেছে, তাহলে লুপ চলবে।
  • লুপের মধ্যে, আপনি প্রতিটি রেকর্ড প্রসেস করতে পারবেন। এখানে, উদাহরণস্বরূপ, প্রিন্ট করা হচ্ছে EmployeeID এবং Name

৪. CLOSE এবং DEALLOCATE

CURSOR ব্যবহারের পর, এটি বন্ধ এবং মেমরি থেকে মুক্ত করতে হবে। এর জন্য CLOSE এবং DEALLOCATE ব্যবহার করা হয়।

উদাহরণ:

CLOSE EmployeeCursor;  -- CURSOR বন্ধ করা
DEALLOCATE EmployeeCursor;  -- CURSOR মেমোরি থেকে মুছে ফেলা
  • CLOSE: CURSOR বন্ধ করে দেয়, যাতে আপনি আর এর মধ্যে রেকর্ড অ্যাক্সেস করতে না পারেন।
  • DEALLOCATE: CURSOR মেমোরি থেকে সম্পূর্ণভাবে মুছে ফেলে, এবং পরবর্তী ব্যবহারের জন্য এটি অবৈধ হয়ে যায়।

পূর্ণ উদাহরণ:

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

DECLARE EmployeeCursor 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 VARCHAR) + ', Name: ' + @EmployeeName;

    -- পরবর্তী রেকর্ডে ফেচ করা
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @EmployeeName;
END

CLOSE EmployeeCursor;
DEALLOCATE EmployeeCursor;

CURSOR ব্যবহারের পরিস্থিতি

  • যতক্ষণ না অন্য পদ্ধতিতে সমাধান সম্ভব: যখন আপনি ডেটাবেসে একাধিক রেকর্ড প্রক্রিয়া করতে চান এবং সেগুলোর মধ্যে লজিক্যাল অপারেশন বা পরিবর্তন করতে চান, তখন CURSOR ব্যবহার উপকারী হতে পারে।
  • তবে কমপ্লেক্স লজিক বা রেকর্ডে অল্প পরিবর্তন করা হলে, Set-based operations (যেমন UPDATE, DELETE বা SELECT কুয়েরি) সাধারণত বেশি কার্যকরী এবং পারফরম্যান্স ভালো হয়।

CURSOR এর বিকল্প

যতটা সম্ভব CURSOR ব্যবহার থেকে বিরত থাকা উচিত, কারণ এটি পারফরম্যান্সে সমস্যা তৈরি করতে পারে। WHILE লুপ এবং Set-based operations (যেমন UPDATE, INSERT, SELECT) এর মাধ্যমে অনেক কাজ করা সম্ভব, যা CURSOR-এর চেয়ে বেশি কার্যকরী এবং দ্রুত।


সারাংশ

  • CURSOR T-SQL-এ একটি শক্তিশালী বৈশিষ্ট্য যা একাধিক রেকর্ডের মধ্যে একে একে কাজ করতে ব্যবহৃত হয়।
  • এটি DECLARE, OPEN, FETCH, CLOSE, এবং DEALLOCATE এর মাধ্যমে কাজ করে।
  • তবে, CURSOR ব্যবহারের সময়ে পারফরম্যান্সে প্রভাব পড়তে পারে, তাই অন্যান্য পদ্ধতির মাধ্যমে ডেটা প্রক্রিয়াকরণ করার চেষ্টা করা উচিত।

CURSOR শুধুমাত্র তখন ব্যবহার করুন যখন এটি প্রয়োজনীয় এবং বিকল্প পদ্ধতি কার্যকরী না হয়।

Content added By
Promotion

Are you sure to start over?

Loading...