Scalar Functions এবং Table-Valued Functions (TVF), দুটি প্রধান ধরনের ফাংশন যা SQL Server-এ ব্যবহৃত হয়, ডেটাবেস অপারেশনগুলিকে আরও কার্যকর এবং পুনঃব্যবহারযোগ্য করতে। এগুলি Stored Procedures থেকে আলাদা, কারণ ফাংশনগুলি সাধারণত একটি একক মান বা একটি টেবিল রিটার্ন করে, এবং এগুলি অন্য SQL কুয়েরিতে সরাসরি ব্যবহার করা যায়।
নিচে Scalar Functions এবং Table-Valued Functions এর বিস্তারিত ধারণা এবং ব্যবহারের উদাহরণ দেওয়া হলো।
১. Scalar Function
Scalar Function হল একটি ফাংশন যা একক মান রিটার্ন করে। এই ফাংশনটি কোনো একটি ইনপুট প্যারামিটার গ্রহণ করে এবং তার ভিত্তিতে একটি মান (যেমন একটি সংখ্যা, স্ট্রিং, তারিখ ইত্যাদি) রিটার্ন করে।
Scalar Function এর গঠন:
CREATE FUNCTION function_name (@parameter datatype)
RETURNS datatype
AS
BEGIN
DECLARE @result datatype;
-- কোড লিখুন যা @parameter ভিত্তিক @result নির্ধারণ করবে
RETURN @result;
END;
উদাহরণ: Scalar Function তৈরি করা
ধরা যাক, আমাদের একটি Scalar Function তৈরি করতে হবে যা একটি কর্মীর বেতন এবং তার বোনাসের ভিত্তিতে তার মোট বেতন রিটার্ন করবে:
CREATE FUNCTION GetTotalSalary (@EmployeeID INT)
RETURNS DECIMAL(10, 2)
AS
BEGIN
DECLARE @BaseSalary DECIMAL(10, 2);
DECLARE @Bonus DECIMAL(10, 2);
-- কর্মীর বেতন এবং বোনাস নির্বাচন করা
SELECT @BaseSalary = Salary FROM Employees WHERE EmployeeID = @EmployeeID;
SELECT @Bonus = Bonus FROM EmployeeBonus WHERE EmployeeID = @EmployeeID;
-- মোট বেতন হিসাব করা এবং রিটার্ন করা
RETURN @BaseSalary + @Bonus;
END;
Scalar Function কল করা:
SELECT dbo.GetTotalSalary(101);
এখানে, GetTotalSalary ফাংশনটি একটি EmployeeID গ্রহণ করে এবং সেই কর্মীর Salary এবং Bonus যোগফল রিটার্ন করবে।
২. Table-Valued Function (TVF)
Table-Valued Function হল একটি ফাংশন যা একটি টেবিল রিটার্ন করে। এই ফাংশনটি একটি বা একাধিক ইনপুট প্যারামিটার গ্রহণ করে এবং একটি টেবিল আউটপুট হিসাবে প্রদান করে, যা SQL কুয়েরি বা স্টোরড প্রসিডিউরে ব্যবহার করা যায়। TVF সাধারণত Inline বা Multi-Statement হিসাবে দুই ধরনের হতে পারে।
Inline Table-Valued Function এর গঠন:
CREATE FUNCTION function_name (@parameter datatype)
RETURNS TABLE
AS
RETURN
(
SELECT column1, column2, ...
FROM table_name
WHERE condition
);
Multi-Statement Table-Valued Function এর গঠন:
CREATE FUNCTION function_name (@parameter datatype)
RETURNS @table_variable TABLE (column1 datatype, column2 datatype, ...)
AS
BEGIN
-- কোড লিখুন যা টেবিল তৈরি করবে এবং ডেটা ইনসার্ট করবে
INSERT INTO @table_variable (column1, column2)
SELECT column1, column2 FROM table_name WHERE condition;
RETURN;
END;
উদাহরণ: Inline Table-Valued Function
ধরা যাক, আপনি একটি ফাংশন তৈরি করতে চান যা একটি নির্দিষ্ট DepartmentID এর ভিত্তিতে কর্মীদের তালিকা রিটার্ন করবে।
CREATE FUNCTION GetEmployeesByDepartment (@DepartmentID INT)
RETURNS TABLE
AS
RETURN
(
SELECT EmployeeID, Name, Position
FROM Employees
WHERE DepartmentID = @DepartmentID
);
Table-Valued Function কল করা:
এখন আপনি এই ফাংশনটি ব্যবহার করে কর্মীদের তালিকা পেতে পারেন:
SELECT * FROM dbo.GetEmployeesByDepartment(3);
এটি DepartmentID 3 এর সকল কর্মীদের EmployeeID, Name, এবং Position রিটার্ন করবে।
উদাহরণ: Multi-Statement Table-Valued Function
ধরা যাক, আপনি একটি ফাংশন তৈরি করতে চান যা একটি নির্দিষ্ট Salary এর উপরে কর্মীদের নির্বাচন করবে এবং তাদের ডেটা একটি টেবিল আকারে প্রদান করবে।
CREATE FUNCTION GetEmployeesAboveSalary (@SalaryThreshold DECIMAL(10, 2))
RETURNS @EmployeeTable TABLE (EmployeeID INT, Name NVARCHAR(100), Salary DECIMAL(10, 2))
AS
BEGIN
INSERT INTO @EmployeeTable (EmployeeID, Name, Salary)
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Salary > @SalaryThreshold;
RETURN;
END;
Table-Valued Function কল করা:
এখন আপনি ফাংশনটি কল করে কর্মীদের তালিকা পেতে পারেন যারা Salary এর উপরে আছেন:
SELECT * FROM dbo.GetEmployeesAboveSalary(50000);
এটি সমস্ত কর্মী যারা Salary 50,000 এর উপরে, তাদের EmployeeID, Name, এবং Salary রিটার্ন করবে।
Scalar এবং Table-Valued Functions এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Scalar Function | Table-Valued Function (TVF) |
|---|---|---|
| রিটার্ন টাইপ | একক মান (scalar value) | একটি টেবিল (table) |
| ইনপুট প্যারামিটার | একটি বা একাধিক ইনপুট প্যারামিটার | একটি বা একাধিক ইনপুট প্যারামিটার |
| ব্যবহার | অন্য ফাংশন বা কুয়েরির মধ্যে একক মান হিসেবে ব্যবহৃত | টেবিল হিসেবে কুয়েরি বা স্টোরড প্রসিডিউরে ব্যবহৃত |
| কনটেক্সট | সাধারণত প্রাথমিক মানের সাথে কাজ করে | কাস্টম টেবিল আউটপুট তৈরি করে |
| ব্যবহারযোগ্যতা | সাধারণ ক্যালকুলেশন, প্রক্রিয়াকরণ | জটিল ডেটা সেটের সাথে কাজ করতে ব্যবহৃত |
সারাংশ
- Scalar Function: এটি একটি ফাংশন যা একক মান (যেমন একটি সংখ্যা, তারিখ, স্ট্রিং ইত্যাদি) রিটার্ন করে এবং এটি সাধারণত ডেটাবেসের ছোট পরিবর্তন বা গণনা করার জন্য ব্যবহৃত হয়।
- Table-Valued Function (TVF): এটি একটি ফাংশন যা একটি সম্পূর্ণ টেবিল আউটপুট রিটার্ন করে এবং এটি SQL কুয়েরি বা স্টোরড প্রসিডিউর-এ ব্যবহার করা যায়। TVF ডেটাবেসে জটিল ডেটা সেটের জন্য উপযোগী।
এই দুই ধরনের ফাংশন SQL Server-এ ডেটাবেসের কার্যক্ষমতা, কাস্টমাইজেশন এবং পুনঃব্যবহারযোগ্যতার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more