T-SQL এ Inline Functions এবং Multi-Statement Functions দুটি ধরনের স্কালেবল ও পুনঃব্যবহারযোগ্য ফাংশন। এগুলি ডেটাবেস অপারেশনগুলোকে মডুলার এবং আরও সহজে ব্যবস্থাপনা করার সুযোগ প্রদান করে। তবে, এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্যও রয়েছে। নিচে এই ফাংশনগুলোর বৈশিষ্ট্য, ব্যবহারের কেস, এবং পার্থক্যগুলো আলোচনা করা হলো।
১. Inline Table-Valued Functions (TVF)
Inline Functions হল এমন ফাংশন যা একটি একক SELECT স্টেটমেন্ট ধারণ করে এবং কোনো কন্ট্রোল ফ্লো বা মাল্টিপল স্টেটমেন্ট থাকে না। এটি সাধারণত Table-Valued Function (TVF) হিসাবে ব্যবহৃত হয়, যা একটি টেবিলের মতো রিটার্ন করে এবং একক কুয়েরি হিসেবে কাজ করে।
বৈশিষ্ট্য:
- Single SELECT statement: Inline function একটি সিঙ্গেল
SELECTস্টেটমেন্টে কাজ করে। - No BEGIN...END block: Inline function এ BEGIN...END ব্লক থাকে না, কারণ এটি একটি একক কুয়েরি।
- Returns a table: এটি টেবিলের মতো ডেটা রিটার্ন করে, যা আপনি
JOIN,WHERE, এবং অন্যান্য কুয়েরি অপারেশনগুলিতে ব্যবহার করতে পারেন। - Performance: Inline functions সাধারণত দ্রুত এবং পারফর্ম্যান্সে ভালো, কারণ এটি একটি সহজ কুয়েরি হিসেবে কাজ করে এবং এটি ভিউ (view)-এর মতো আচরণ করে।
উদাহরণ: Inline Function
-- Inline Function তৈরি করা
CREATE FUNCTION dbo.fn_GetEmployeeDetails (@DepartmentID INT)
RETURNS TABLE
AS
RETURN
(
SELECT EmployeeID, EmployeeName
FROM Employees
WHERE DepartmentID = @DepartmentID
);
এখানে, fn_GetEmployeeDetails ফাংশনটি DepartmentID এর ভিত্তিতে Employees টেবিল থেকে EmployeeID এবং EmployeeName রিটার্ন করে।
ফাংশন কল করা:
SELECT * FROM dbo.fn_GetEmployeeDetails(1);
এটি DepartmentID = 1 এর সকল কর্মচারীর তথ্য রিটার্ন করবে।
২. Multi-Statement Table-Valued Functions (TVF)
Multi-Statement Functions হল এমন ফাংশন যেখানে একাধিক SQL স্টেটমেন্ট থাকে এবং এটি একটি টেবিল রিটার্ন করে, তবে একাধিক INSERT, UPDATE, অথবা SELECT স্টেটমেন্টের মাধ্যমে ডেটা প্রসেস করা হতে পারে। এই ফাংশনটি একটি টেবিল পরিবর্তন বা প্রক্রিয়া করার জন্য একাধিক স্টেটমেন্ট ধারণ করে।
বৈশিষ্ট্য:
- Multiple statements: এই ফাংশনটিতে একাধিক
SELECT,INSERT,UPDATE, অথবাDELETEস্টেটমেন্ট থাকতে পারে। - BEGIN...END block: মাল্টি-স্টেটমেন্ট ফাংশন একটি
BEGIN...ENDব্লক ধারণ করে। - Returns a table: এটি একটি টেবিল রিটার্ন করে এবং এর মধ্যে সমস্ত স্টেটমেন্টগুলো একত্রে কার্যকর হয়।
- Performance: এই ফাংশনটি Inline function থেকে কিছুটা ধীর হতে পারে, কারণ এতে একাধিক স্টেটমেন্ট থাকে।
উদাহরণ: Multi-Statement Function
-- Multi-Statement Function তৈরি করা
CREATE FUNCTION dbo.fn_GetEmployeeSalary (@DepartmentID INT)
RETURNS @EmployeeSalary TABLE
(
EmployeeID INT,
EmployeeName VARCHAR(100),
Salary DECIMAL(10, 2)
)
AS
BEGIN
-- প্রথম SELECT স্টেটমেন্ট
INSERT INTO @EmployeeSalary (EmployeeID, EmployeeName)
SELECT EmployeeID, EmployeeName
FROM Employees
WHERE DepartmentID = @DepartmentID;
-- দ্বিতীয় SELECT স্টেটমেন্ট
UPDATE @EmployeeSalary
SET Salary = (SELECT SUM(Salary) FROM EmployeeSalaries WHERE EmployeeSalaries.EmployeeID = @EmployeeSalary.EmployeeID)
RETURN;
END;
এখানে, fn_GetEmployeeSalary ফাংশনটি প্রথমে একটি SELECT স্টেটমেন্ট ব্যবহার করে EmployeeID এবং EmployeeName প্রাপ্ত করে, তারপর EmployeeSalaries টেবিল থেকে Salary আপডেট করে।
ফাংশন কল করা:
SELECT * FROM dbo.fn_GetEmployeeSalary(1);
এটি DepartmentID = 1 এর সকল কর্মচারীর তথ্য এবং তাদের Salary রিটার্ন করবে।
৩. Inline এবং Multi-Statement Functions এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Inline Function | Multi-Statement Function |
|---|---|---|
| সংগঠন | একটি একক SELECT স্টেটমেন্ট | একাধিক SELECT, INSERT, UPDATE, ইত্যাদি স্টেটমেন্ট |
| কোডের জটিলতা | সাধারণ এবং সরল | জটিল, একাধিক স্টেটমেন্টসহ |
| পারফরম্যান্স | দ্রুত এবং পারফর্ম্যান্সে ভালো | কিছুটা ধীর, কারণ একাধিক স্টেটমেন্ট থাকে |
| ফাংশনের সিমপ্লিসিটি | সহজ এবং ক্লিন কোড | কোডের জটিলতা বেশি, কারণ একাধিক স্টেটমেন্ট |
| ডেটা রিটার্ন | একটি টেবিল রিটার্ন করে | একটি টেবিল রিটার্ন করে |
| BEGIN...END ব্লক | নেই | থাকে |
| ব্যবহারের কেস | সহজ, একক কুয়েরি ভিত্তিক কাজ | জটিল প্রক্রিয়া যেখানে একাধিক স্টেটমেন্ট প্রয়োজন |
সারাংশ
- Inline Functions হল সিঙ্গেল
SELECTস্টেটমেন্ট সহ ফাংশন, যা দ্রুত এবং সহজে ব্যবহৃত হয়। এটি পারফরম্যান্সের দিক থেকে ভাল, তবে একাধিক কন্ডিশন বা অপারেশন প্রক্রিয়া করার জন্য এটি সীমিত হতে পারে। - Multi-Statement Functions একাধিক SQL স্টেটমেন্ট ধারণ করে এবং বড় ডেটা প্রসেসিংয়ের জন্য উপযুক্ত। তবে এগুলির পারফরম্যান্স Inline Functions এর তুলনায় কিছুটা ধীর হতে পারে, কারণ এতে একাধিক স্টেটমেন্ট থাকে।
আপনার প্রয়োজনে নির্ভর করে, আপনি Inline Functions অথবা Multi-Statement Functions ব্যবহার করতে পারেন।
Read more