Dynamic SQL এবং CURSOR এর বাস্তব উদাহরণ

বাস্তব উদাহরণ এবং ডেমো - টি-এসকিউএল (T-SQL) - Database Tutorials

322

Dynamic SQL এবং CURSOR হল T-SQL এর দুটি শক্তিশালী বৈশিষ্ট্য, যা ডেটাবেসের মধ্যে জটিল কাজ সম্পাদন করতে ব্যবহৃত হয়। এই দুটি বৈশিষ্ট্য একে অপরের সঙ্গে বা আলাদাভাবে ব্যবহার করা যেতে পারে, কিন্তু তাদের সঠিক ব্যবহার বুঝতে হবে।

এখানে Dynamic SQL এবং CURSOR এর বাস্তব উদাহরণ দেওয়া হলো, যা আপনার ডেটাবেস কার্যক্রমকে আরও উন্নত করবে।


1. Dynamic SQL

Dynamic SQL হল SQL কোড যেটি রানটাইমে তৈরি এবং এক্সিকিউট করা হয়। এটি সাধারণত ব্যবহৃত হয় যখন আপনাকে কুয়েরি তৈরির সময় ইনপুট বা শর্ত অনুযায়ী SQL কোড পরিবর্তন করতে হয়। যেমন, টেবিলের নাম বা কলামের নাম পরিবর্তন করতে হলে, Dynamic SQL ব্যবহৃত হয়।

Dynamic SQL এর সিনট্যাক্স:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM ' + QUOTENAME(@TableName);
EXEC sp_executesql @sql;

ব্যবহারিক উদাহরণ:

ধরা যাক, একটি ডেটাবেসে অনেকগুলো টেবিল আছে, এবং আপনি একাধিক টেবিল থেকে ডেটা প্রাপ্তি করতে চান, তবে টেবিলের নাম ডাইনামিকভাবে পাস করতে হবে।

DECLARE @TableName NVARCHAR(50), @sql NVARCHAR(MAX);
SET @TableName = 'Employees';

-- Dynamic SQL তৈরির জন্য
SET @sql = 'SELECT * FROM ' + QUOTENAME(@TableName);

-- Dynamic SQL এক্সিকিউট করা
EXEC sp_executesql @sql;

এখানে:

  • @TableName: টেবিলের নাম ডাইনামিকভাবে পাস করা হচ্ছে।
  • QUOTENAME(): SQL ইনজেকশন থেকে বাঁচতে এবং টেবিল বা কলামের নাম সঠিকভাবে মাপতে ব্যবহৃত হয়।
  • sp_executesql: ডাইনামিক SQL চালাতে ব্যবহৃত T-SQL ফাংশন।

Dynamic SQL এর বাস্তব ব্যবহার:

আপনি যদি কোনো রিপোর্ট তৈরি করতে চান যেখানে প্রতিটি টেবিলের জন্য আলাদা আলাদা কুয়েরি চালাতে হয়, তখন আপনি Dynamic SQL ব্যবহার করতে পারেন। এতে কোড পুনরাবৃত্তি এড়ানো সম্ভব হবে এবং ডেটাবেসে অটোমেটিক্যালি কুয়েরি এক্সিকিউট করা যাবে।


2. CURSOR

CURSOR হল একটি প্রোগ্রামেবল অবজেক্ট যা ডেটাবেসের রেকর্ডগুলিকে সারি অনুসারে ট্রাভার্স করতে ব্যবহৃত হয়। CURSOR সাধারণত তখন ব্যবহার করা হয় যখন আপনি একাধিক রেকর্ডের মধ্যে লুপ চালাতে চান এবং প্রতিটি রেকর্ডের জন্য কিছু নির্দিষ্ট অপারেশন করতে চান।

CURSOR এর সিনট্যাক্স:

DECLARE cursor_name CURSOR FOR
    SELECT_column_names
    FROM_table_name;

OPEN cursor_name;

FETCH NEXT FROM cursor_name INTO @variable1, @variable2;

-- Loop through the cursor
WHILE @@FETCH_STATUS = 0
BEGIN
    -- Process each row
    FETCH NEXT FROM cursor_name INTO @variable1, @variable2;
END;

CLOSE cursor_name;
DEALLOCATE cursor_name;

ব্যবহারিক উদাহরণ:

ধরা যাক, আপনি একটি টেবিল থেকে সমস্ত EmployeeID বের করতে চান এবং তাদের সেলারি আপডেট করতে চান। এখানে একটি CURSOR ব্যবহার করা হবে।

DECLARE @EmployeeID INT, @Salary DECIMAL(10, 2);

-- Cursor তৈরি
DECLARE employee_cursor CURSOR FOR
SELECT EmployeeID, Salary
FROM Employees
WHERE Department = 'Sales';

-- Cursor খুলুন
OPEN employee_cursor;

-- Cursor থেকে ডেটা নিয়ে আসুন
FETCH NEXT FROM employee_cursor INTO @EmployeeID, @Salary;

-- Loop through the cursor
WHILE @@FETCH_STATUS = 0
BEGIN
    -- সেলারি আপডেট করা
    UPDATE Employees
    SET Salary = @Salary + 5000
    WHERE EmployeeID = @EmployeeID;

    -- পরবর্তী রেকর্ডটি নিয়ে আসুন
    FETCH NEXT FROM employee_cursor INTO @EmployeeID, @Salary;
END;

-- Cursor বন্ধ এবং মুছে ফেলুন
CLOSE employee_cursor;
DEALLOCATE employee_cursor;

এখানে:

  • employee_cursor: এটি একটি কাস্টম কার্সর যা Employees টেবিল থেকে সমস্ত কর্মচারী আইডি এবং সেলারি নিয়ে আসে।
  • FETCH NEXT: এটি পরবর্তী রেকর্ডটি ডাটাবেস থেকে নিয়ে আসে এবং নির্দিষ্ট ভ্যারিয়েবলগুলোতে মান অ্যাসাইন করে।
  • UPDATE: আমরা এখানে একটি লুপ ব্যবহার করে প্রতিটি কর্মচারীর সেলারি আপডেট করেছি।
  • @@FETCH_STATUS: এটি চেক করে যে কার্সরটি শেষ হয়েছে কিনা। 0 মানে সফলভাবে একটি রেকর্ড ফেচ করা হয়েছে।

CURSOR এর বাস্তব ব্যবহার:

CURSOR সাধারনত তখন ব্যবহৃত হয় যখন:

  • আপনি একাধিক রেকর্ডের মধ্যে লুপ করতে চান।
  • ডেটাবেসের প্রতিটি রেকর্ডের জন্য একটি নির্দিষ্ট অপারেশন করতে চান, যেমন আপডেট বা ডিলিট।

Dynamic SQL এবং CURSOR এর পার্থক্য

বৈশিষ্ট্যDynamic SQLCURSOR
ব্যবহারএকাধিক টেবিলের মধ্যে কুয়েরি তৈরি এবং এক্সিকিউট করাএকাধিক সারি ট্রাভার্স করে ডেটা প্রসেস করা
প্রক্রিয়াSQL কুয়েরি রানটাইমে তৈরি করা এবং এক্সিকিউট করাসারি বাই সারি ডেটা প্রক্রিয়া করা
কার্যকারিতাSQL কোডে ডাইনামিক চেঞ্জ করাটেবিলের প্রতিটি রেকর্ডের জন্য লুপ চালানো
পারফরম্যান্সদ্রুত কিন্তু কমপ্লেক্স কুয়েরির জন্য উপযুক্তসাধারণত ধীর গতির, বিশেষত বড় ডেটাসেটের জন্য
প্রয়োগবিভিন্ন টেবিল এবং কলাম নিয়ন্ত্রণএক্সিকিউটিভ লজিকের জন্য, একাধিক রেকর্ডের সাথে কাজ করা

সারাংশ

  • Dynamic SQL ডাইনামিকভাবে SQL কুয়েরি তৈরি করতে ব্যবহৃত হয়। এটি তখন ব্যবহার করা হয় যখন কুয়েরি টেবিলের নাম বা কলামের নাম ডাইনামিকভাবে নির্ধারণ করতে হয়। এটি জটিল কুয়েরির জন্য খুবই কার্যকরী।
  • CURSOR সারি বাই সারি ডেটা ট্রাভার্স করতে ব্যবহৃত হয়। এটি যখন প্রয়োজন হয় যখন একাধিক রেকর্ডে একসাথে অপারেশন করতে হয়, তবে এটি কিছুটা কম পারফর্ম্যান্সের হতে পারে বড় ডেটাসেটের জন্য।

এই দুটি বৈশিষ্ট্য, Dynamic SQL এবং CURSOR T-SQL এ ডেটাবেস অপারেশনের জন্য অত্যন্ত শক্তিশালী এবং কার্যকরী টুল।

Content added By
Promotion

Are you sure to start over?

Loading...