T-SQL এ লুপ এবং ইটেরেশন (iteration) ব্যবহৃত হয় ডেটাবেস অপারেশনগুলিকে একাধিক বার পুনরায় চালানোর জন্য, নির্দিষ্ট শর্তের উপর ভিত্তি করে। T-SQL-এ বেশ কিছু লুপিং স্ট্রাকচার রয়েছে যা আপনাকে একাধিক বার কোড চালাতে সহায়তা করে, যেমন WHILE, CURSOR, এবং অন্যান্য কাস্টম লজিক।
১. WHILE লুপ
T-SQL এ WHILE লুপ সবচেয়ে সাধারণ লুপ স্ট্রাকচার। এটি একটি শর্ত পূরণ না হওয়া পর্যন্ত কোডের ব্লক একাধিক বার চালায়।
WHILE লুপ সিনট্যাক্স:
WHILE condition
BEGIN
-- Statements to be executed
END
উদাহরণ: 1 থেকে 5 পর্যন্ত সংখ্যা প্রিন্ট করা
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT @Counter;
SET @Counter = @Counter + 1;
END
এখানে, @Counter ভেরিয়েবলটি প্রতি লুপে ১ বৃদ্ধি পায় এবং এটি ৫ পর্যন্ত প্রিন্ট হয়।
২. BREAK এবং CONTINUE স্টেটমেন্ট
- BREAK: লুপের মধ্যে এই স্টেটমেন্টটি ব্যবহার করা হয় লুপটি বন্ধ করার জন্য।
- CONTINUE: লুপের মধ্যে এই স্টেটমেন্টটি ব্যবহার করা হয় পরবর্তী ইটারেশনে চলে যেতে।
উদাহরণ: BREAK এবং CONTINUE ব্যবহার করা
DECLARE @Counter INT = 1;
WHILE @Counter <= 10
BEGIN
IF @Counter = 5
BEGIN
SET @Counter = @Counter + 1;
CONTINUE; -- ৫ হলে পরবর্তী ইটারেশনে চলে যাবে
END
IF @Counter = 8
BEGIN
BREAK; -- ৮ হলে লুপ বন্ধ হবে
END
PRINT @Counter;
SET @Counter = @Counter + 1;
END
এখানে, যখন কাউন্টার ৫ হবে তখন CONTINUE কার্যকর হবে, এবং যখন ৮ হবে তখন BREAK কার্যকর হয়ে লুপটি বন্ধ হয়ে যাবে।
৩. CURSOR ব্যবহার করে ইটেরেশন
T-SQL-এ CURSOR ব্যবহার করা হয় ডেটার ওপর ইটেরেশন করার জন্য। সাধারণত, যখন আপনি একটি কুয়েরি চালিয়ে একাধিক রেকর্ডের ওপর লুপ চালাতে চান, তখন CURSOR ব্যবহৃত হয়।
CURSOR সিনট্যাক্স:
CURSOR ডিক্লেয়ার করা:
DECLARE cursor_name CURSOR FOR SELECT column_name FROM table_name;- FETCH এবং OPEN:
OPEN cursor_name;— CURSOR ওপেন করে।FETCH NEXT FROM cursor_name INTO @variable_name;— পরবর্তী রেকর্ডটি ভেরিয়েবলে ফেচ করা।
- CLOSE এবং DEALLOCATE:
CLOSE cursor_name;— CURSOR বন্ধ করে।DEALLOCATE cursor_name;— CURSOR মেমরি থেকে মুছে ফেলে।
উদাহরণ: CURSOR ব্যবহার করে ডেটার ওপর ইটেরেশন
DECLARE @EmployeeName VARCHAR(50);
DECLARE employee_cursor CURSOR FOR
SELECT Name FROM Employees;
OPEN employee_cursor;
FETCH NEXT FROM employee_cursor INTO @EmployeeName;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @EmployeeName;
FETCH NEXT FROM employee_cursor INTO @EmployeeName;
END
CLOSE employee_cursor;
DEALLOCATE employee_cursor;
এখানে, Employees টেবিলের Name কলামের প্রতিটি রেকর্ডের ওপর CURSOR ব্যবহার করে ইটেরেশন করা হচ্ছে এবং প্রতিটি EmployeeName প্রিন্ট করা হচ্ছে।
৪. FOR LATERAL লুপ (SQL Server 2022 থেকে)
SQL Server 2022 থেকে FOR LATERAL লুপ যোগ করা হয়েছে, যা একই সারিতে একাধিক রেকর্ড পুনরায় এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি শুধুমাত্র T-SQL কাস্টম ফাংশন ও সেলারি কোডের মধ্যে ব্যবহৃত হয়।
উদাহরণ:
SELECT *
FROM Table1
FOR LATERAL (SELECT TOP 1 * FROM Table2 WHERE Table2.ID = Table1.ID);
এটি একে অপরের মধ্যে সম্পর্কিত দুটি টেবিলের মধ্যে একাধিক মান প্রক্রিয়া করার জন্য ব্যবহার করা হয়।
৫. RECURSIVE CTE (Common Table Expressions)
যখন ডেটা পুনরাবৃত্তি (recursive) লজিক প্রয়োগ করতে হয়, তখন RECURSIVE CTE ব্যবহার করা হয়। এটি বিশেষভাবে হায়ারারকিক্যাল ডেটার সাথে কাজ করার জন্য উপকারী। উদাহরণস্বরূপ, পিতামাতা-সন্তান সম্পর্ক বা কর্মচারী এবং তাদের সুপারভাইজারের সম্পর্কের মধ্যে এটি ব্যবহার করা যায়।
উদাহরণ: RECURSIVE CTE ব্যবহার
WITH EmployeeHierarchy AS
(
SELECT EmployeeID, ManagerID, Name
FROM Employees
WHERE ManagerID IS NULL -- Root level (e.g., CEO)
UNION ALL
SELECT e.EmployeeID, e.ManagerID, e.Name
FROM Employees e
INNER JOIN EmployeeHierarchy eh
ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;
এখানে, EmployeeHierarchy নামক CTE ব্যবহৃত হচ্ছে যা কর্মচারীদের পিতামাতা-সন্তান সম্পর্কের ভিত্তিতে পুনরাবৃত্তি লজিক প্রয়োগ করবে।
সারাংশ
T-SQL এ লুপ এবং ইটেরেশন ব্যবহারের বিভিন্ন উপায় রয়েছে। সবচেয়ে সাধারণ লুপ হল WHILE লুপ, যা নির্দিষ্ট শর্ত পূর্ণ না হওয়া পর্যন্ত কোড একাধিক বার চালায়। BREAK এবং CONTINUE স্টেটমেন্টের মাধ্যমে লুপ নিয়ন্ত্রণ করা যায়। CURSOR ব্যবহার করে ডেটার ওপর ইটেরেশন করা যায় এবং RECURSIVE CTE হায়ারারকিক্যাল ডেটার জন্য উপকারী। T-SQL এর এই লুপ এবং ইটেরেশন স্ট্রাকচারগুলো আপনাকে ডেটাবেসে আরো জটিল ও গতিশীল কার্যাবলী সম্পাদন করতে সহায়তা করে।
T-SQL এর WHILE লুপ একটি কন্ট্রোল ফ্লো স্টেটমেন্ট যা নির্দিষ্ট শর্ত পূরণ হওয়া পর্যন্ত একটি কোড ব্লক একাধিক বার এক্সিকিউট করতে ব্যবহৃত হয়। এটি একটি ইটারেটিভ লুপ, যেখানে লুপের মধ্যে থাকা কোড একাধিক বার রান হয় যতক্ষণ না লুপের শর্ত মিথ্যা হয়ে যায়।
WHILE লুপের মৌলিক সিনট্যাক্স:
WHILE (শর্ত)
BEGIN
-- কোড যা বার বার এক্সিকিউট হবে
END
- শর্ত: এটি একটি লজিক্যাল এক্সপ্রেশন যা সত্য (True) হলে লুপটি চলতে থাকবে। যদি শর্ত মিথ্যা (False) হয়, তাহলে লুপটি শেষ হবে।
- BEGIN...END: একাধিক স্টেটমেন্ট একসাথে রান করতে ব্যবহৃত হয়। যখন একাধিক SQL স্টেটমেন্ট থাকে, তখন এগুলি একটি
BEGIN...ENDব্লকে রাখতে হবে।
উদাহরণ ১: সাধারণ WHILE লুপ
নিম্নলিখিত উদাহরণটি ১ থেকে ৫ পর্যন্ত সংখ্যাগুলি প্রিন্ট করবে।
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT @Counter;
SET @Counter = @Counter + 1;
END
ব্যাখ্যা:
- এখানে
@Counterভেরিয়েবলটি প্রথমে ১ দিয়ে আরম্ভ করা হয়। - শর্ত
@Counter <= 5সত্য থাকলে, WHILE লুপটি চলে এবং@Counterএর মান প্রিন্ট করে। তারপর@Counterএর মান ১ বাড়িয়ে দেওয়া হয়। - লুপটি ৫ বার চলে এবং ১ থেকে ৫ পর্যন্ত মান প্রিন্ট করবে।
উদাহরণ ২: WHILE লুপে শর্ত পরিবর্তন
এখানে একেকটি ভ্যালুকে ২ দিয়ে গুণ করা হচ্ছে যতক্ষণ না ফলাফল ১০০ এর বেশি হয়ে যায়।
DECLARE @Number INT = 2;
WHILE @Number <= 100
BEGIN
PRINT @Number;
SET @Number = @Number * 2;
END
ব্যাখ্যা:
- শুরুতে
@Numberএর মান ২। - প্রতি ইটারেশনে
@Numberএর মান ২ দ্বারা গুণিত হচ্ছে। - যখন
@Number১০০ এর বেশি হয়ে যায়, তখন লুপ বন্ধ হয়ে যাবে।
উদাহরণ ৩: BREAK এবং CONTINUE স্টেটমেন্ট
BREAK স্টেটমেন্ট ব্যবহার করে আপনি লুপটি বন্ধ করতে পারেন, এবং CONTINUE স্টেটমেন্ট ব্যবহার করে লুপের পরবর্তী ইটারেশনে চলে যেতে পারেন।
DECLARE @Counter INT = 1;
WHILE @Counter <= 10
BEGIN
IF @Counter = 5
BEGIN
BREAK; -- যখন @Counter 5 হবে, লুপ বন্ধ হবে
END
PRINT @Counter;
SET @Counter = @Counter + 1;
END
ব্যাখ্যা:
- এখানে
@Counterযদি ৫ হয়, তখন BREAK স্টেটমেন্ট কার্যকর হবে এবং লুপটি থেমে যাবে। - এই কুয়েরি ১ থেকে ৪ পর্যন্ত সংখ্যাগুলি প্রিন্ট করবে এবং তারপর বন্ধ হবে।
উদাহরণ ৪: CONTINUE স্টেটমেন্ট
DECLARE @Counter INT = 0;
WHILE @Counter < 5
BEGIN
SET @Counter = @Counter + 1;
IF @Counter = 3
BEGIN
CONTINUE; -- যখন @Counter 3 হবে, পরবর্তী স্টেটমেন্ট স্কিপ হবে
END
PRINT @Counter;
END
ব্যাখ্যা:
- এই কুয়েরি ১, ২, ৪, ৫ সংখ্যাগুলি প্রিন্ট করবে। কারণ যখন
@Counter৩ হয়, তখন CONTINUE স্টেটমেন্ট পরবর্তী ইটারেশনে চলে যাবে এবং ৩ স্কিপ হবে।
সারাংশ
- WHILE লুপ ব্যবহার করে নির্দিষ্ট শর্ত পূর্ণ না হওয়া পর্যন্ত কোডের ব্লক একাধিক বার এক্সিকিউট করা যায়।
- শর্ত সত্য হলে লুপ চলে এবং শর্ত মিথ্যা হলে লুপ বন্ধ হয়ে যায়।
- BREAK এবং CONTINUE স্টেটমেন্ট ব্যবহার করে লুপের মধ্যে প্রবাহ নিয়ন্ত্রণ করা যায়। BREAK লুপ বন্ধ করে এবং CONTINUE পরবর্তী ইটারেশনে চলে যায়।
T-SQL এ WHILE লুপ একটি শক্তিশালী কন্ট্রোল ফ্লো স্টেটমেন্ট যা ডেটাবেস অপারেশন ও লজিকাল কাজগুলো পুনরাবৃত্তি (iteration) করতে সহায়তা করে।
BREAK এবং CONTINUE কমান্ডগুলি T-SQL-এ লুপ (যেমন WHILE বা FOR লুপ) এর মধ্যে ব্যবহৃত হয়, এবং এগুলি লুপের মধ্যে ফ্লো কন্ট্রোল পরিবর্তন করার জন্য ব্যবহৃত হয়। নিচে এই দুটি কমান্ডের বিস্তারিত ব্যবহার ব্যাখ্যা করা হলো।
১. BREAK
BREAK কমান্ডটি ব্যবহার করা হয় লুপ বা কন্ডিশনাল স্টেটমেন্টের ভিতরে একটি নির্দিষ্ট শর্ত পূর্ণ হলে লুপ বা কন্ডিশনাল স্টেটমেন্ট থেকে সম্পূর্ণভাবে বাহির হয়ে আসতে। এটি লুপের এক্সিকিউশন থামিয়ে দেয় এবং কন্ট্রোল পরবর্তী স্টেটমেন্টে চলে যায়।
ব্যবহার:
BREAK;
উদাহরণ:
ধরা যাক, আপনি একটি WHILE লুপে একটি শর্ত পূর্ণ হওয়ার পর লুপটি বন্ধ করতে চান:
DECLARE @counter INT = 1;
WHILE @counter <= 10
BEGIN
IF @counter = 5
BEGIN
BREAK; -- যখন @counter 5 হবে, লুপটি বন্ধ হয়ে যাবে
END
PRINT @counter;
SET @counter = @counter + 1;
END;
এই কোডের মধ্যে, লুপটি চলতে থাকবে যতক্ষণ না @counter 5 হয়। যখন @counter = 5 হয়, তখন BREAK কমান্ড কার্যকর হবে এবং লুপটি বন্ধ হয়ে যাবে।
২. CONTINUE
CONTINUE কমান্ডটি ব্যবহৃত হয় লুপের মধ্যে চলমান অবস্থায় কিছু শর্ত পূর্ণ হলে লুপের পরবর্তী চক্রে চলে যেতে। অর্থাৎ, CONTINUE লুপের বর্তমান ইটারেশনটি বাদ দিয়ে পরবর্তী ইটারেশনে চলে যায়।
ব্যবহার:
CONTINUE;
উদাহরণ:
ধরা যাক, আপনি একটি WHILE লুপে এমন একটি শর্ত তৈরি করেছেন, যেখানে শর্ত পূর্ণ হলে শুধু পরবর্তী ইটারেশন চালানো হবে এবং বর্তমান ইটারেশন উপেক্ষা করা হবে।
DECLARE @counter INT = 1;
WHILE @counter <= 10
BEGIN
IF @counter = 5
BEGIN
SET @counter = @counter + 1;
CONTINUE; -- যখন @counter 5 হবে, লুপের বর্তমান ইটারেশন স্কিপ করা হবে
END
PRINT @counter;
SET @counter = @counter + 1;
END;
এখানে, যখন @counter 5 হয়, তখন CONTINUE কমান্ড কার্যকর হবে এবং সেই ইটারেশনটি স্কিপ হয়ে যাবে। পরবর্তী ইটারেশন (যতক্ষণ না @counter 10 হয়) চালু হবে।
সারাংশ
BREAKকমান্ডটি ব্যবহার করা হয় লুপের চলমান অবস্থায় লুপটি সম্পূর্ণভাবে বন্ধ করে দেয়।CONTINUEকমান্ডটি ব্যবহার করা হয় চলমান লুপে কিছু শর্ত পূর্ণ হলে বর্তমান ইটারেশনটি বাদ দিয়ে পরবর্তী ইটারেশন চালানোর জন্য।
এগুলি সাধারণত WHILE বা FOR লুপের মধ্যে ব্যবহৃত হয়, যেখানে লুপের ফ্লো কন্ট্রোলের প্রয়োজন হয়।
CURSOR T-SQL-এ একটি শক্তিশালী বৈশিষ্ট্য যা একাধিক রেকর্ডের মধ্যে লুপ করার জন্য ব্যবহৃত হয়। সাধারণত, যখন আপনি একাধিক রেকর্ড প্রক্রিয়া করতে চান এবং প্রতিটি রেকর্ডে কিছু নির্দিষ্ট কাজ করতে চান, তখন CURSOR ব্যবহৃত হয়। যদিও CURSOR খুবই কার্যকর, তবে এটি অন্যান্য পদ্ধতির তুলনায় পারফরম্যান্সে একটু স্লো হতে পারে, বিশেষত যখন অনেক রেকর্ড থাকে। তবে কিছু ক্ষেত্রে এটি খুবই দরকারি হয়ে থাকে, যেখানে একাধিক রেকর্ডের মধ্যে লজিক্যাল অপারেশন প্রয়োজন।
CURSOR কী?
CURSOR একটি টেম্পোরারি অ্যাবজেক্ট যা SELECT কুয়েরির মাধ্যমে রেকর্ডের একটি集合 (set) ধরে রাখে। এটি ঐ集合ের প্রতিটি রেকর্ডে একে একে অপারেশন বা প্রক্রিয়া করতে সহায়তা করে।
CURSOR ব্যবহারের প্রক্রিয়া
T-SQL এ CURSOR ব্যবহারের জন্য কয়েকটি প্রধান ধাপ রয়েছে:
- DECLARE: CURSOR ঘোষণা করা
- OPEN: CURSOR খোলা
- FETCH: CURSOR থেকে রেকর্ড নেয়া
- CLOSE: CURSOR বন্ধ করা
- 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 শুধুমাত্র তখন ব্যবহার করুন যখন এটি প্রয়োজনীয় এবং বিকল্প পদ্ধতি কার্যকরী না হয়।
T-SQL তে লুপ এবং ইটেরেশন ব্যবহারের জন্য বিভিন্ন ধরনের লুপ রয়েছে, যেমন WHILE লুপ, FOR লুপ, এবং CURSOR। T-SQL এ ইটেরেশন বা পুনরাবৃত্তি (repetition) কাজ করতে হলে লুপ ব্যবহৃত হয়, যা নির্দিষ্ট শর্তের ভিত্তিতে একাধিক বার একটি কোড ব্লক চালাতে সাহায্য করে।
এখানে কিছু সাধারণ লুপ এবং ইটেরেশন উদাহরণ দেওয়া হলো:
১. WHILE লুপ উদাহরণ
WHILE লুপ হল T-SQL তে সবচেয়ে সাধারণ লুপ, যা একটি শর্তের ভিত্তিতে কোড চালায় যতক্ষণ না শর্তটি মিথ্যা হয়।
উদাহরণ: ১ থেকে 5 পর্যন্ত সংখ্যা প্রদর্শন করা
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT @Counter;
SET @Counter = @Counter + 1;
END
ব্যাখ্যা:
@Counterভেরিয়েবলটি 1 থেকে শুরু করে 5 পর্যন্ত বৃদ্ধি পায়।WHILEলুপটি যতক্ষণ পর্যন্ত@Counter <= 5থাকে, ততক্ষণPRINTকমান্ডের মাধ্যমে প্রতিটি সংখ্যাকে কনসোলে প্রদর্শন করবে।
আউটপুট:
1
2
3
4
5
২. FOR লুপ উদাহরণ
T-SQL তে সরাসরি FOR লুপ নেই, তবে FOR লুপের মত একটি লুপ তৈরি করতে WHILE লুপ ব্যবহার করা হয়। নিচে FOR লুপের মত কাজ করার উদাহরণ দেওয়া হলো।
উদাহরণ: 1 থেকে 10 পর্যন্ত সংখ্যা গুনা করা
DECLARE @Counter INT = 1;
WHILE @Counter <= 10
BEGIN
PRINT @Counter * 2; -- প্রতিটি সংখ্যাকে 2 দিয়ে গুণ করা
SET @Counter = @Counter + 1;
END
ব্যাখ্যা:
- এখানে
WHILEলুপ ব্যবহার করে, প্রতি বার গুন করে সংখ্যা প্রদর্শন করা হচ্ছে। @Counterভেরিয়েবলটি 1 থেকে 10 পর্যন্ত বৃদ্ধি পায় এবং প্রতি সংখ্যাকে 2 দিয়ে গুণ করা হয়।
আউটপুট:
2
4
6
8
10
12
14
16
18
20
৩. CURSOR এর মাধ্যমে ইটেরেশন উদাহরণ
CURSOR ব্যবহার করে একটি টেবিলের প্রতিটি রেকর্ডের ওপর লুপিং করা যায়। এটি বিশেষ করে তখন ব্যবহার হয় যখন আপনি একের পর এক রেকর্ডের সাথে কাজ করতে চান, যেমন একটি টেবিল থেকে প্রতিটি রেকর্ড নিয়ে প্রক্রিয়া সম্পাদন করা।
উদাহরণ: একটি টেবিলের সব রেকর্ড প্রিন্ট করা
DECLARE @EmployeeName NVARCHAR(100);
DECLARE EmployeeCursor CURSOR FOR
SELECT EmployeeName
FROM Employees;
OPEN EmployeeCursor;
FETCH NEXT FROM EmployeeCursor INTO @EmployeeName;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @EmployeeName;
FETCH NEXT FROM EmployeeCursor INTO @EmployeeName;
END
CLOSE EmployeeCursor;
DEALLOCATE EmployeeCursor;
ব্যাখ্যা:
EmployeeCursorএকটি কাস্টম কার্সর তৈরি করে যাEmployeesটেবিল থেকেEmployeeNameকলাম নির্বাচন করে।FETCH NEXTকমান্ডটি পরবর্তী রেকর্ডের মান নিয়ে আসে এবং এটি যতক্ষণ না শেষ হয়, ততক্ষণPRINTকমান্ডের মাধ্যমে নামগুলো প্রদর্শন করা হয়।@@FETCH_STATUSকার্সরটির অবস্থা পরীক্ষা করে, যে লাইনটি শেষ হয়েছে কি না।
আউটপুট:
Employeesটেবিলের সবEmployeeNameপ্রদর্শিত হবে (যে নামগুলি টেবিলে রয়েছে)।
৪. BREAK এবং CONTINUE
T-SQL এ BREAK এবং CONTINUE কমান্ডও ব্যবহার করা যেতে পারে, যা লুপের প্রবাহ পরিবর্তন করে। BREAK লুপটি সম্পূর্ণভাবে বন্ধ করে এবং CONTINUE পরবর্তী পুনরাবৃত্তি শুরু করে।
উদাহরণ: 1 থেকে 10 পর্যন্ত সংখ্যা, তবে 5 হলে স্টপ
DECLARE @Counter INT = 1;
WHILE @Counter <= 10
BEGIN
IF @Counter = 5
BEGIN
BREAK; -- লুপটি 5 এর পর বন্ধ হবে
END
PRINT @Counter;
SET @Counter = @Counter + 1;
END
ব্যাখ্যা:
- যখন
@Counterএর মান 5 হবে, তখনBREAKকমান্ডটি লুপটিকে সম্পূর্ণভাবে বন্ধ করে দেবে।
আউটপুট:
1
2
3
4
সারাংশ
- WHILE লুপ: শর্ত পূর্ণ না হওয়া পর্যন্ত লুপটি চলে।
- CURSOR: টেবিলের প্রতিটি রেকর্ড নিয়ে ইটেরেশন চালানোর জন্য ব্যবহৃত হয়।
- BREAK: লুপের প্রবাহ বন্ধ করার জন্য ব্যবহৃত হয়।
- CONTINUE: লুপের পরবর্তী পুনরাবৃত্তি শুরু করার জন্য ব্যবহৃত হয়।
T-SQL এ লুপ ও ইটেরেশন ব্যবহার করার মাধ্যমে আপনি ডেটাবেসের মধ্যে বিভিন্ন ধরনের কার্যক্রম (যেমন, গণনা, প্রক্রিয়া, ডেটা সংশোধন) করতে পারেন।
Read more