T-SQL তে Functions এমন একটি প্রোগ্রামেবল ইউনিট যা নির্দিষ্ট ইনপুট নিয়ে কিছু প্রক্রিয়া সম্পাদন করে এবং একটি ফলাফল রিটার্ন করে। Functions বিভিন্ন ধরনের হতে পারে, যেমন Scalar Functions (একটি একক মান রিটার্ন করে) এবং Table-Valued Functions (TVF) (একটি টেবিল বা ডেটাসেট রিটার্ন করে)। নিচে T-SQL তে Functions তৈরি এবং ব্যবহার করার কিছু উদাহরণ দেওয়া হলো।
১. Scalar Function তৈরি এবং ব্যবহার
Scalar Function এমন একটি ফাংশন যা একটি ইনপুট নিয়ে একটি একক মান রিটার্ন করে। এই ধরনের ফাংশনগুলি সাধারণত গণনা বা কোনো একক মানের পরিবর্তন করার জন্য ব্যবহৃত হয়।
উদাহরণ: একটি Scalar Function তৈরি করা যা দুটি সংখ্যার যোগফল রিটার্ন করবে
-- Scalar Function তৈরি করা
CREATE FUNCTION dbo.AddNumbers (@Num1 INT, @Num2 INT)
RETURNS INT
AS
BEGIN
RETURN @Num1 + @Num2;
END;
ব্যাখ্যা:
- এখানে
AddNumbersনামের একটি scalar function তৈরি করা হয়েছে, যা দুটি ইনপুট সংখ্যা (@Num1এবং@Num2) নিয়ে তাদের যোগফল রিটার্ন করবে।
ফাংশন ব্যবহার করা
-- Function ব্যবহার করা
SELECT dbo.AddNumbers(5, 10) AS Total;
আউটপুট:
Total
-----
15
এখানে dbo.AddNumbers(5, 10) ফাংশনটি 5 এবং 10 এর যোগফল (15) রিটার্ন করছে।
২. Table-Valued Function (TVF) তৈরি এবং ব্যবহার
Table-Valued Function (TVF) একটি ফাংশন যা একটি টেবিল বা ডেটাসেট রিটার্ন করে। এটি বিশেষ করে ডেটাবেসের বিভিন্ন রেকর্ড বা ডেটা সেটের উপর কাজ করতে ব্যবহৃত হয়।
উদাহরণ: একটি Table-Valued Function তৈরি করা যা নির্দিষ্ট বয়সের উপর ভিত্তি করে কর্মীদের তথ্য রিটার্ন করবে
-- Table-Valued Function তৈরি করা
CREATE FUNCTION dbo.GetEmployeesByAge (@Age INT)
RETURNS TABLE
AS
RETURN
(
SELECT EmployeeID, EmployeeName, Age
FROM Employees
WHERE Age = @Age
);
ব্যাখ্যা:
GetEmployeesByAgeনামের একটি TVF তৈরি করা হয়েছে, যা একটি@Ageইনপুট নেয় এবং সেই বয়সের সকল কর্মীদের তথ্য (EmployeeID, EmployeeName, Age) রিটার্ন করে।
TVF ব্যবহার করা
-- Table-Valued Function ব্যবহার করা
SELECT *
FROM dbo.GetEmployeesByAge(30);
আউটপুট:
EmployeeID | EmployeeName | Age
--------------------------------
101 | John Doe | 30
102 | Jane Smith | 30
এখানে dbo.GetEmployeesByAge(30) ফাংশনটি বয়স ৩০ এর সকল কর্মীকে রিটার্ন করেছে।
৩. ফাংশন ড্রপ (Drop) করা
যখন আপনি আর একটি ফাংশন ব্যবহার করতে না চান বা মুছে ফেলতে চান, তখন DROP FUNCTION কমান্ড ব্যবহার করা হয়।
উদাহরণ: Scalar Function মুছে ফেলা
-- Scalar Function ড্রপ করা
DROP FUNCTION dbo.AddNumbers;
উদাহরণ: Table-Valued Function মুছে ফেলা
-- Table-Valued Function ড্রপ করা
DROP FUNCTION dbo.GetEmployeesByAge;
৪. নোটস
- T-SQL Functions অবশ্যই
RETURNকিওয়ার্ড ব্যবহার করে একটি মান রিটার্ন করবে। Scalar Function একক মান রিটার্ন করে, যেখানে Table-Valued Function একটি টেবিল বা ডেটাসেট রিটার্ন করে। - Scalar Functions সাধারণত সিঙ্গল কলাম বা একক মানের জন্য ব্যবহৃত হয়, যখন Table-Valued Functions বড় ডেটাসেট বা টেবিল রিটার্ন করার জন্য ব্যবহার করা হয়।
- T-SQL তে Functions ব্যবহার করা কোডকে আরও মোডুলার এবং পুনরায় ব্যবহারযোগ্য করে তোলে।
সারাংশ
T-SQL তে Functions তৈরি এবং ব্যবহার করে আপনি কোডকে আরও সংরক্ষিত এবং দক্ষ করতে পারেন। Scalar Functions একক মান রিটার্ন করে এবং Table-Valued Functions টেবিল রিটার্ন করে। Functions আপনার কোডকে আরও পরিষ্কার, কার্যকরী এবং পুনঃব্যবহারযোগ্য করে তোলে।
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-এ ডেটাবেসের কার্যক্ষমতা, কাস্টমাইজেশন এবং পুনঃব্যবহারযোগ্যতার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
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 ব্যবহার করতে পারেন।
T-SQL (Transact-SQL) তে দুটি ধরণের ফাংশন রয়েছে: Built-in Functions এবং User-Defined Functions (UDF)। এই ফাংশনগুলো ডেটাবেসে ডেটা ম্যানিপুলেশন ও বিশ্লেষণের জন্য ব্যবহৃত হয়।
1. Built-in Functions
Built-in Functions হল সেই ফাংশনগুলো যা SQL Server নিজেই সরবরাহ করে এবং ডেটাবেস অপারেশনকে আরও সহজ এবং কার্যকরী করতে সাহায্য করে। এগুলি ডেটা ম্যানিপুলেশন, গণনা, স্ট্রিং প্রসেসিং, তারিখ এবং সময় সম্পর্কিত কাজ ইত্যাদি করার জন্য ব্যবহার করা হয়।
Built-in Functions এর ধরন:
এ্যাগ্রিগেট ফাংশন (Aggregate Functions): এগুলি গ্রুপ করা ডেটার ওপর কাজ করে এবং একটি একক ফলাফল প্রদান করে।
COUNT(): রেকর্ডের সংখ্যা গণনা করা।SUM(): মানের যোগফল গণনা করা।AVG(): গড় মান বের করা।MIN()এবংMAX(): সর্বনিম্ন এবং সর্বোচ্চ মান বের করা।
উদাহরণ:
SELECT COUNT(*) FROM Employees; -- সমস্ত রেকর্ড গুনতে SELECT AVG(Salary) FROM Employees; -- গড় বেতন বের করাস্ট্রিং ফাংশন (String Functions): এগুলি স্ট্রিং ডেটার সাথে কাজ করে।
LEN(): স্ট্রিং এর দৈর্ঘ্য বের করা।UPPER()এবংLOWER(): স্ট্রিংকে বড়/ছোট অক্ষরে রূপান্তর করা।CONCAT(): দুটি বা তার বেশি স্ট্রিংকে একত্রিত করা।
উদাহরণ:
SELECT LEN('Hello') AS StringLength; -- 5 SELECT UPPER('hello') AS UpperString; -- 'HELLO'তারিখ এবং সময় ফাংশন (Date and Time Functions):
GETDATE(): বর্তমান তারিখ এবং সময় ফিরিয়ে দেয়।DATEADD(): নির্দিষ্ট তারিখে সময় যোগ করা।DATEDIFF(): দুটি তারিখের মধ্যে পার্থক্য বের করা।
উদাহরণ:
SELECT GETDATE(); -- বর্তমান তারিখ এবং সময় SELECT DATEADD(DAY, 5, GETDATE()); -- 5 দিন যোগ করানিউমেরিক ফাংশন (Numeric Functions):
ROUND(): একটি সংখ্যা রাউন্ড করা।ABS(): একটি সংখ্যার অভ্যন্তরীণ মান বের করা (নেগেটিভ মানের জন্য পজিটিভ মান)
উদাহরণ:
SELECT ROUND(123.456, 2); -- 123.46 SELECT ABS(-100); -- 100
2. User-Defined Functions (UDF)
User-Defined Functions (UDF) হল ফাংশনগুলি যা ব্যবহারকারী নিজে তৈরি করে। এগুলি বিশেষভাবে তৈরি করা হয় যখন Built-in Functions এর মাধ্যমে নির্দিষ্ট কাজ করা সম্ভব না হয়। UDF ব্যবহার করে আপনি কাস্টম লজিক বা হিসাব তৈরি করতে পারেন এবং তা বারবার ব্যবহার করতে পারেন।
UDF এর ধরন:
Scalar Functions:
- একটি স্কেলার ফাংশন একক মান রিটার্ন করে।
- এই ধরনের ফাংশন সাধারণত একক ইনপুট গ্রহণ করে এবং একটি একক আউটপুট প্রদান করে।
উদাহরণ:
CREATE FUNCTION dbo.GetFullName (@FirstName VARCHAR(50), @LastName VARCHAR(50)) RETURNS VARCHAR(100) AS BEGIN RETURN @FirstName + ' ' + @LastName; END;এটি
GetFullNameনামে একটি ফাংশন তৈরি করে যা দুটি ইনপুট নেয় এবং সেগুলির মধ্যে স্পেস দিয়ে যুক্ত করে একটি পূর্ণ নাম প্রদান করে।ব্যবহার:
SELECT dbo.GetFullName('John', 'Doe');Table-Valued Functions (TVF):
- এটি একটি ফাংশন যা টেবিলের মতো ডেটা রিটার্ন করে। একটি Table-Valued Function এর রিটার্ন টেবিলের মতো হয় এবং এটিকে সাধারণ টেবিলের মতো ব্যবহার করা যায়।
উদাহরণ:
CREATE FUNCTION dbo.GetEmployeesByDepartment (@DepartmentName VARCHAR(50)) RETURNS TABLE AS RETURN ( SELECT EmployeeID, FirstName, LastName FROM Employees WHERE Department = @DepartmentName );এখানে একটি Table-Valued Function তৈরি করা হয়েছে যা একটি নির্দিষ্ট ডিপার্টমেন্টের সকল কর্মচারীর তথ্য রিটার্ন করবে।
ব্যবহার:
SELECT * FROM dbo.GetEmployeesByDepartment('IT');Inline Table-Valued Functions:
- Inline TVF গুলি সাধারণত SELECT স্টেটমেন্ট দ্বারা রিটার্ন করা হয়। এগুলি সাধারণত ছোট ফাংশন হয় এবং SQL Server-এর জন্য পারফরম্যান্স অপ্টিমাইজড হয়।
উদাহরণ:
CREATE FUNCTION dbo.GetEmployeeInfo (@EmployeeID INT) RETURNS TABLE AS RETURN (SELECT FirstName, LastName, Department FROM Employees WHERE EmployeeID = @EmployeeID);ব্যবহার:
SELECT * FROM dbo.GetEmployeeInfo(1);
Built-in Functions এবং UDF এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Built-in Functions | User-Defined Functions (UDF) |
|---|---|---|
| সংজ্ঞা | SQL Server দ্বারা প্রাক-নির্ধারিত ফাংশন | ব্যবহারকারীর তৈরি কাস্টম ফাংশন |
| ফাংশনের ধরন | স্ট্রিং, তারিখ, সংখ্যার জন্য বিভিন্ন ফাংশন | স্কেলার ফাংশন বা টেবিল-ভ্যালু ফাংশন (TVF) |
| প্রত্যাবর্তন মান | একক মান, তালিকা বা একাধিক মান | একক মান (scalar) বা টেবিল (table) |
| পারফরম্যান্স | সাধারণত অপ্টিমাইজড এবং দ্রুত | পারফরম্যান্সের জন্য ব্যবহারকারীর উপর নির্ভর করে |
| ব্যবহার | সাধারণত ডেটাবেস অপারেশন, গণনা বা স্ট্রিং ম্যানিপুলেশনের জন্য | জটিল কাস্টম লজিক বা ডেটাবেস অপারেশন করার জন্য |
সারাংশ
- Built-in Functions SQL Server দ্বারা প্রাক-নির্ধারিত ফাংশন যা সাধারণ কাজের জন্য ব্যবহৃত হয় যেমন গাণিতিক অপারেশন, তারিখ এবং সময় ব্যবস্থাপনা, স্ট্রিং প্রসেসিং ইত্যাদি।
- User-Defined Functions (UDF) ব্যবহারকারীর তৈরি কাস্টম ফাংশন যা বিশেষ কাজের জন্য তৈরি হয় এবং এগুলিকে একাধিকবার ব্যবহার করা যায়, স্কেলার বা টেবিল-ভ্যালু ফাংশন হিসেবে রিটার্ন করতে পারে।
UDF ব্যবহার করে আপনি SQL Server-এ কাস্টম লজিক তৈরি করতে পারেন, যখন Built-in Functions সাধারণত প্রতিদিনের ডেটাবেস অপারেশন এবং ডেটা প্রসেসিংয়ের জন্য উপযুক্ত।
T-SQL এ Functions ব্যবহার করে আপনি ডেটাবেসের মধ্যে একাধিক লজিক্যাল অপারেশন এবং ডেটা প্রক্রিয়াকরণ করতে পারেন। Functions সাধারণত একটি নির্দিষ্ট কাজ সম্পাদন করে এবং একটি ফলাফল (সাধারণত একটি মান) ফেরত দেয়। T-SQL এ দুটি প্রকারের ফাংশন রয়েছে:
- Scalar Functions: একটি একক মান রিটার্ন করে।
- Table-Valued Functions (TVF): একটি টেবিল রিটার্ন করে।
নিচে কিছু উদাহরণসহ T-SQL ফাংশন ব্যাখ্যা করা হলো:
১. Scalar Functions
Scalar Functions শুধুমাত্র একটি একক মান রিটার্ন করে, যা সাধারণত কোনো গাণিতিক বা লজিক্যাল অপারেশন সম্পাদন করে। এগুলি একটি নির্দিষ্ট কলামের উপর কাজ করতে পারে এবং ফলস্বরূপ একটি মান প্রদান করে।
উদাহরণ ১: Simple Scalar Function (যেখানে একটি নাম্বারের গুণফল বের করা হয়)
CREATE FUNCTION MultiplyByTwo (@Number INT)
RETURNS INT
AS
BEGIN
RETURN @Number * 2;
END
এটি একটি সিম্পল Scalar Function যা একটি নাম্বার ইনপুট হিসেবে নেয় এবং তার গুণফল (x2) রিটার্ন করে।
ব্যবহার:
SELECT dbo.MultiplyByTwo(5) AS Result;
এই কোডটি 5 এর গুণফল ২ দিয়ে 10 রিটার্ন করবে।
২. Table-Valued Functions (TVF)
Table-Valued Functions (TVF) একটি টেবিল রিটার্ন করে, যা SELECT কুয়েরি হিসেবে ব্যবহার করা যেতে পারে। এটি ডেটা সেট রিটার্ন করার জন্য ব্যবহৃত হয় এবং জটিল কুয়েরি অপারেশন বা ডেটাবেস থেকে ভিউ হিসাবে কাজ করতে পারে।
উদাহরণ ২: Simple Table-Valued Function (যেখানে একটি নির্দিষ্ট শর্তের ভিত্তিতে রেকর্ড ফেরত দেওয়া হয়)
CREATE FUNCTION GetEmployeesByDepartment (@DepartmentName VARCHAR(100))
RETURNS TABLE
AS
RETURN
(
SELECT EmployeeID, FirstName, LastName
FROM Employees
WHERE Department = @DepartmentName
);
এটি একটি Table-Valued Function যা নির্দিষ্ট একটি ডিপার্টমেন্টের সব কর্মচারীর ডেটা রিটার্ন করে।
ব্যবহার:
SELECT * FROM dbo.GetEmployeesByDepartment('HR');
এই কোডটি Employees টেবিল থেকে HR ডিপার্টমেন্টের সমস্ত কর্মচারীর নাম, প্রথম নাম এবং শেষ নাম রিটার্ন করবে।
৩. Inline Table-Valued Functions (ITVF)
Inline Table-Valued Functions (ITVF) একটি কোয়েরি থেকে সরাসরি টেবিল রিটার্ন করে। ITVF সাধারণত একাধিক স্টেটমেন্টের পরিবর্তে একটি একক SELECT স্টেটমেন্ট রিটার্ন করে।
উদাহরণ ৩: Inline Table-Valued Function (যেখানে কর্মচারীর নাম এবং ডিপার্টমেন্ট নির্ধারণ করা হয়)
CREATE FUNCTION GetEmployeeInfo (@EmployeeID INT)
RETURNS TABLE
AS
RETURN
(
SELECT EmployeeID, FirstName, LastName, Department
FROM Employees
WHERE EmployeeID = @EmployeeID
);
এটি একটি Inline Table-Valued Function যা নির্দিষ্ট EmployeeID এর জন্য কর্মচারীর নাম এবং ডিপার্টমেন্ট রিটার্ন করে।
ব্যবহার:
SELECT * FROM dbo.GetEmployeeInfo(1001);
এটি Employees টেবিল থেকে EmployeeID 1001 এর কর্মচারীর নাম এবং ডিপার্টমেন্ট রিটার্ন করবে।
৪. নেস্টেড ফাংশন
আপনি এক ফাংশনের ভিতরে অন্য ফাংশনও ব্যবহার করতে পারেন। এটি আরও জটিল এবং কাস্টম লজিক তৈরি করতে সহায়তা করে।
উদাহরণ ৪: Nested Function (যেখানে দুটি ফাংশন একসাথে ব্যবহার করা হয়)
CREATE FUNCTION GetFullName (@FirstName VARCHAR(50), @LastName VARCHAR(50))
RETURNS VARCHAR(100)
AS
BEGIN
RETURN (SELECT CONCAT(@FirstName, ' ', @LastName));
END
এটি FirstName এবং LastName কলামগুলোকে একত্রিত (concat) করে পূর্ণ নাম রিটার্ন করে।
ব্যবহার:
SELECT dbo.GetFullName('John', 'Doe') AS FullName;
এটি 'John Doe' রিটার্ন করবে।
৫. ব্যতিক্রম হ্যান্ডলিং (Error Handling) সহ Function
T-SQL ফাংশনগুলিতে ERROR_HANDLING প্রয়োগ করা সম্ভব নয়, কিন্তু TRY...CATCH ব্লকগুলির মধ্যে ফাংশনগুলি অন্তর্ভুক্ত করতে পারলে আপনি ত্রুটি পরিচালনা করতে পারেন।
উদাহরণ ৫: Function with Error Handling
CREATE FUNCTION SafeDivide (@Numerator INT, @Denominator INT)
RETURNS VARCHAR(50)
AS
BEGIN
BEGIN TRY
RETURN CAST(@Numerator / @Denominator AS VARCHAR);
END TRY
BEGIN CATCH
RETURN 'Error: Division by Zero';
END CATCH
END
এটি একটি SafeDivide ফাংশন, যেখানে Zero দ্বারা ভাগ করার ক্ষেত্রে একটি ত্রুটি রিটার্ন করবে।
ব্যবহার:
SELECT dbo.SafeDivide(10, 0) AS Result;
এটি 'Error: Division by Zero' রিটার্ন করবে যদি ডিভাইডার 0 হয়।
সারাংশ
T-SQL Functions হল এমন ফাংশন যা ডেটাবেসে নির্দিষ্ট কাজগুলি করতে ব্যবহৃত হয়। Scalar Functions একক মান রিটার্ন করে, এবং Table-Valued Functions (TVF) টেবিল রিটার্ন করে। Functions ডেটাবেসে পুনঃব্যবহারযোগ্য লজিক তৈরি করার জন্য গুরুত্বপূর্ণ, এবং এগুলি অনেক জটিল ডেটা প্রক্রিয়াকরণ করতে সাহায্য করে।
T-SQL ফাংশনের বিভিন্ন ধরনের উদাহরণ এবং তাদের ব্যবহার বুঝে আপনি ডেটাবেস অ্যাপ্লিকেশনগুলো আরও কার্যকরী এবং নির্ভুলভাবে পরিচালনা করতে পারবেন।
Read more