Stored Procedures তৈরি এবং ব্যবহার

টি-এসকিউএল (T-SQL) - Database Tutorials

392

Stored Procedures হল SQL Server-এ একাধিক SQL স্টেটমেন্টের একটি সেট, যা ডেটাবেসে সংরক্ষিত থাকে এবং পরবর্তীতে CALL বা EXECUTE কমান্ড দিয়ে পুনরায় ব্যবহার করা যায়। স্টোরড প্রসিডিউর ব্যবহারের সুবিধা হলো এটি কোড পুনঃব্যবহারযোগ্য করে, পারফরম্যান্স বাড়ায় এবং ডেটাবেসের নিরাপত্তা বাড়ায়, কারণ আপনি ইউজারকে সরাসরি SQL কোড চালানোর অনুমতি না দিয়ে প্রসিডিউর কল করতে পারেন।


Stored Procedure তৈরি করার সাধারণ সিনট্যাক্স:

CREATE PROCEDURE procedure_name
AS
BEGIN
    -- SQL স্টেটমেন্ট
END;
  • procedure_name: স্টোরড প্রসিডিউরের নাম।
  • AS: এটি স্টোরড প্রসিডিউরের শুরু।
  • BEGIN...END: একাধিক SQL স্টেটমেন্টের একটি ব্লক যা স্টোরড প্রসিডিউরের মধ্যে থাকতে পারে।

উদাহরণ ১: Stored Procedure তৈরি এবং ব্যবহার

ধরা যাক, আপনার একটি Employees টেবিল আছে এবং আপনি কর্মী সম্পর্কে তথ্য প্রাপ্তির জন্য একটি স্টোরড প্রসিডিউর তৈরি করতে চান। এই প্রসিডিউরটি একটি EmployeeID প্যারামিটার নিবে এবং ঐ কর্মী সম্পর্কে সমস্ত তথ্য রিটার্ন করবে।

Step 1: Stored Procedure তৈরি করা

CREATE PROCEDURE GetEmployeeDetails
    @EmployeeID INT
AS
BEGIN
    SELECT * FROM Employees WHERE EmployeeID = @EmployeeID;
END;

এখানে:

  • @EmployeeID: একটি ইনপুট প্যারামিটার যা স্টোরড প্রসিডিউরের জন্য আর্গুমেন্ট হিসেবে কাজ করবে।
  • স্টোরড প্রসিডিউর GetEmployeeDetails নির্দিষ্ট EmployeeID এর জন্য ডেটা নির্বাচন করবে।

Step 2: Stored Procedure কল করা

একবার স্টোরড প্রসিডিউর তৈরি হয়ে গেলে, আপনি এটি EXECUTE বা EXEC কমান্ড দিয়ে কল করতে পারেন।

EXEC GetEmployeeDetails @EmployeeID = 101;

এখানে, EmployeeID = 101 দিয়ে আমরা ঐ কর্মী সম্পর্কে তথ্য রিটার্ন করব।


উদাহরণ ২: Stored Procedure সহ আর্গুমেন্ট ব্যবহার

ধরা যাক, আপনি একটি স্টোরড প্রসিডিউর তৈরি করতে চান যা কর্মী নাম এবং তাদের পদের উপর ভিত্তি করে তথ্য প্রদান করবে। আপনি এই প্রসিডিউরে দুটি প্যারামিটার ব্যবহার করবেন: @Name এবং @Position

CREATE PROCEDURE GetEmployeesByPosition
    @Name NVARCHAR(100),
    @Position NVARCHAR(50)
AS
BEGIN
    SELECT * FROM Employees
    WHERE Name LIKE '%' + @Name + '%'
    AND Position = @Position;
END;

এই স্টোরড প্রসিডিউরটি:

  • @Name এবং @Position প্যারামিটার হিসেবে গ্রহণ করবে।
  • কর্মীদের নামের মধ্যে @Name কিওয়ার্ড দিয়ে এবং পদের ক্ষেত্রে @Position দিয়ে ফিল্টার করবে।

Stored Procedure কল করা:

EXEC GetEmployeesByPosition @Name = 'John', @Position = 'Manager';

এটি John নামক এবং Manager পদের সকল কর্মীদের তথ্য রিটার্ন করবে।


উদাহরণ ৩: Stored Procedure-তে লজিকাল কন্ডিশন এবং লুপ ব্যবহার

আপনি স্টোরড প্রসিডিউর-এ IF...ELSE বা WHILE লুপও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি স্টোরড প্রসিডিউর তৈরি করতে পারেন যা একাধিক কর্মীর বেতন আপডেট করবে, যদি তাদের Salary একটি নির্দিষ্ট পরিমাণের নিচে হয়।

CREATE PROCEDURE UpdateEmployeeSalaries
    @SalaryIncreaseAmount DECIMAL(10, 2)
AS
BEGIN
    DECLARE @EmployeeID INT;

    -- যেসকল কর্মীর Salary 50000 এর কম, তাদের বেতন বাড়ানো হবে
    DECLARE EmployeeCursor CURSOR FOR
    SELECT EmployeeID FROM Employees WHERE Salary < 50000;

    OPEN EmployeeCursor;
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        UPDATE Employees
        SET Salary = Salary + @SalaryIncreaseAmount
        WHERE EmployeeID = @EmployeeID;
        
        FETCH NEXT FROM EmployeeCursor INTO @EmployeeID;
    END;

    CLOSE EmployeeCursor;
    DEALLOCATE EmployeeCursor;
END;

এখানে:

  • EmployeeCursor একটি কনকারেন্ট কুয়েরি চালাচ্ছে যা কর্মীদের EmployeeID নিয়ে আসে, যাদের Salary 50,000 এর নিচে।
  • SalaryIncreaseAmount প্যারামিটারটির মাধ্যমে আপনি কিভাবে তাদের বেতন বাড়াবেন তা নির্ধারণ করতে পারবেন।

Stored Procedure কল করা:

EXEC UpdateEmployeeSalaries @SalaryIncreaseAmount = 2000;

এটি সকল কর্মীর বেতন যারা 50,000 এর কম, তাদের বেতন 2000 বাড়িয়ে দেবে।


উদাহরণ ৪: Stored Procedure-এ এক্সেপশন হ্যান্ডলিং

SQL Server-এ এক্সেপশন হ্যান্ডলিং করার জন্য TRY...CATCH ব্লক ব্যবহার করা যায়। এটি স্টোরড প্রসিডিউর-এ ভুল বা ত্রুটি আটকাতে সহায়তা করে।

CREATE PROCEDURE SafeEmployeeUpdate
    @EmployeeID INT,
    @NewSalary DECIMAL(10, 2)
AS
BEGIN
    BEGIN TRY
        UPDATE Employees
        SET Salary = @NewSalary
        WHERE EmployeeID = @EmployeeID;
    END TRY
    BEGIN CATCH
        PRINT 'Error occurred: ' + ERROR_MESSAGE();
    END CATCH;
END;

এখানে, যদি কোনো ত্রুটি ঘটে, তখন ERROR_MESSAGE() ফাংশন ত্রুটির বার্তা প্রিন্ট করবে।

Stored Procedure কল করা:

EXEC SafeEmployeeUpdate @EmployeeID = 101, @NewSalary = 55000;

এটি কর্মীর Salary আপডেট করবে, এবং যদি কোনো ত্রুটি ঘটে, তবে ত্রুটির বার্তা প্রিন্ট করবে।


সারাংশ

  • Stored Procedures SQL Server-এ ডেটাবেস কোড পুনঃব্যবহারযোগ্য, কাস্টমাইজড এবং নিরাপদ করতে সহায়তা করে।
  • এটি একাধিক SQL স্টেটমেন্টের একটি সেট যা ডেটাবেসে সংরক্ষিত থাকে এবং প্রয়োজনে একাধিকবার ব্যবহার করা যায়।
  • স্টোরড প্রসিডিউর বিভিন্ন প্যারামিটার, লজিক, এক্সেপশন হ্যান্ডলিং, এবং কন্ডিশনাল লজিক ব্যবহার করে খুবই শক্তিশালী এবং কার্যকরী ডেটাবেস অপারেশন তৈরি করতে সাহায্য করে।
Content added By

Stored Procedure (স্পষ্টভাবে, "স্টোরড প্রসিডিউর") হল একটি প্রি-কম্পাইলড, পুনরায় ব্যবহারযোগ্য SQL কোড ব্লক যা ডেটাবেস সার্ভারে সংরক্ষিত থাকে এবং প্রয়োজনে একাধিক বার এক্সিকিউট করা যায়। এটি একাধিক SQL স্টেটমেন্ট বা কার্যক্রমের একটি গ্রুপ যা ডেটাবেসে সংরক্ষণ করা হয় এবং একবার লেখা হলে বার বার পুনঃব্যবহার করা যায়।

একটি Stored Procedure সাধারণত একটি নির্দিষ্ট কাজ বা প্রসেস (যেমন, ডেটা ইনসার্ট করা, আপডেট করা, ডিলিট করা, অথবা কাস্টম ক্যালকুলেশন করা) সম্পাদন করে।


Stored Procedure এর সিনট্যাক্স

CREATE PROCEDURE procedure_name
AS
BEGIN
    -- SQL statements
END;
  • CREATE PROCEDURE: এটি Stored Procedure তৈরি করার জন্য ব্যবহার হয়।
  • procedure_name: এটি আপনার Stored Procedure এর নাম।
  • SQL statements: এখানে একাধিক SQL স্টেটমেন্ট থাকতে পারে, যেমন SELECT, INSERT, UPDATE, DELETE ইত্যাদি।

Stored Procedure এর উদাহরণ

CREATE PROCEDURE GetEmployeeDetails
AS
BEGIN
    SELECT Name, Position FROM Employees;
END;

এটি একটি সহজ Stored Procedure যা Employees টেবিল থেকে Name এবং Position কলাম নির্বাচন করবে।

Stored Procedure এক্সিকিউট করা:

EXEC GetEmployeeDetails;

এটি GetEmployeeDetails Stored Procedure এক্সিকিউট করবে এবং সংশ্লিষ্ট তথ্য রিটার্ন করবে।


Stored Procedure কেন ব্যবহার করা হয়?

১. কোড পুনরায় ব্যবহারযোগ্যতা

Stored Procedures একবার তৈরি হলে, একাধিক জায়গায় ব্যবহার করা যেতে পারে। এতে কোডের পুনঃব্যবহার সহজ হয় এবং ডেভেলপমেন্ট সময় কমে আসে।

২. কেন্দ্রীভূত লজিক

স্টোরড প্রসিডিউরগুলির মাধ্যমে আপনি ডেটাবেস লজিক (যেমন, ডেটা সংরক্ষণ, ট্রানজ্যাকশন, ক্যালকুলেশন ইত্যাদি) এক জায়গায় রাখবেন, যার ফলে আপনার অ্যাপ্লিকেশন কোডে ডুপ্লিকেট কোড কম হবে এবং Maintenance সহজ হবে।

৩. পারফরম্যান্স উন্নয়ন

Stored Procedures প্রি-কাম্পাইল্ড কোড হওয়ায় এগুলি SQL Server বা অন্যান্য ডেটাবেসে দ্রুত এক্সিকিউট হয়। কোড একবার কম্পাইল হয়, তারপর প্রতি এক্সিকিউশনে কম্পাইল করার প্রয়োজন হয় না, যার ফলে পারফরম্যান্স উন্নত হয়।

৪. নিরাপত্তা

Stored Procedures ব্যবহার করলে আপনি পরিচিত SQL কোড (যেমন SELECT, INSERT, UPDATE) এবং ফাংশনালিটি অ্যাপ্লিকেশন থেকে আলাদা রাখতে পারেন। এর ফলে, অ্যাপ্লিকেশন ব্যবহারকারীরা শুধুমাত্র স্টোরড প্রসিডিউরটিই এক্সিকিউট করতে পারবে, কিন্তু তারা সরাসরি টেবিল বা ডেটাবেসের ডেটা অ্যাক্সেস করতে পারবে না। এইভাবে আপনি ডেটাবেসে অ্যাক্সেস কন্ট্রোল করতে পারেন।

৫. ট্রানজ্যাকশন ম্যানেজমেন্ট

Stored Procedures-এর মধ্যে আপনি ট্রানজ্যাকশন (যেমন BEGIN TRANSACTION, COMMIT, ROLLBACK) ব্যবহারের মাধ্যমে ডেটাবেস অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। এটি ডেটাবেসে একাধিক অপারেশন নিশ্চিতভাবে সম্পন্ন করতে সাহায্য করে।

৬. ডেটাবেস নির্দিষ্ট লজিক

স্টোরড প্রসিডিউর ব্যবহার করে আপনি ডেটাবেস নির্দিষ্ট বিভিন্ন কার্যাবলী কাস্টমাইজ করতে পারেন। যেমন, ইনপুট প্যারামিটার ব্যবহার করে নির্দিষ্ট রেকর্ড বা ডেটার ওপর কাজ করা যেতে পারে।


Stored Procedure এর সুবিধা

  1. কোড অপ্টিমাইজেশন: একাধিক SQL স্টেটমেন্টকে একত্রিত করে এবং প্রি-কাম্পাইল করে পারফরম্যান্স উন্নত করা সম্ভব।
  2. ডেটাবেস নিরাপত্তা: ইউজারদের নির্দিষ্ট কাজ করতে বাধ্য করার মাধ্যমে ডেটাবেস অ্যাক্সেস নিরাপদ করা যায়।
  3. এলগোরিদম পরিচালনা: কঠিন এলগোরিদম ও ডেটা প্রসেসিংকে সহজ ও দ্রুত বাস্তবায়ন করা যায়।
  4. কাস্টম ক্যালকুলেশন: একাধিক সেন্ট্রালাইজড ক্যালকুলেশন ব্যবহার করা যায় যা অ্যাপ্লিকেশন কোডে যোগ করার প্রয়োজনীয়তা কমিয়ে দেয়।
  5. নির্ভরযোগ্যতা: একাধিক অ্যাপ্লিকেশন একে ব্যবহার করতে পারে, যা কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।

Stored Procedure এর সীমাবদ্ধতা

  1. ডিবাগিং সমস্যা: স্টোরড প্রসিডিউরগুলি ডিবাগ করা কিছুটা কঠিন হতে পারে কারণ কোড সরাসরি অ্যাপ্লিকেশনে না দেখায়।
  2. টেবিলের সাথে যুক্ত সমস্যা: যদি আপনি অনেক বেশি লজিক এবং শর্ত একে একে স্টোরড প্রসিডিউরে যুক্ত করেন, তাহলে এগুলি খুব জটিল হতে পারে, যা বজায় রাখা কঠিন হয়ে দাঁড়ায়।
  3. ডাটাবেস নির্ভরতা: স্টোরড প্রসিডিউর শুধুমাত্র একটি নির্দিষ্ট ডেটাবেসে কাজ করে, তাই যদি ডেটাবেস পরিবর্তন হয়, তবে স্টোরড প্রসিডিউরও আপডেট করতে হয়।

সারাংশ

Stored Procedure হল একটি প্রি-কম্পাইলড SQL কোড ব্লক যা একাধিক SQL স্টেটমেন্ট সংরক্ষণ করে এবং প্রয়োজনে একাধিক বার এক্সিকিউট করা হয়। এটি ডেটাবেসের পারফরম্যান্স বৃদ্ধি, কোড পুনরায় ব্যবহারযোগ্যতা, এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে। এটি ডেটাবেস লজিক সেন্ট্রালাইজড করে এবং কোড মেইনটেনেন্স সহজ করে তোলে।

Content added By

Stored Procedure হল SQL Server-এ একাধিক SQL স্টেটমেন্টের একটি গ্রুপ যা ডেটাবেসে সংরক্ষিত থাকে এবং প্রয়োজনে পুনরায় এক্সিকিউট করা যায়। Stored Procedure তৈরি করা হয় যখন আপনি বার বার একই কোড ব্যবহার করতে চান বা একটি নির্দিষ্ট কাজ একাধিক স্থানে চালাতে চান। এটি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং ডেটাবেস পরিচালনাকে সহজতর করে।

Stored Procedure এর মৌলিক সিনট্যাক্স

CREATE PROCEDURE ProcedureName
AS
BEGIN
    -- SQL স্টেটমেন্ট
END;
  • CREATE PROCEDURE: স্টোরড প্রসিডিউর তৈরি করার জন্য ব্যবহার করা হয়।
  • ProcedureName: এটি স্টোরড প্রসিডিউরের নাম।
  • AS: এর মাধ্যমে SQL কোড ব্লক শুরু হয়।
  • BEGIN...END: একাধিক SQL স্টেটমেন্টকে একত্রে রাখতে ব্যবহৃত হয়।

উদাহরণ ১: সাধারণ Stored Procedure তৈরি

ধরা যাক, আপনি একটি স্টোরড প্রসিডিউর তৈরি করতে চান যা Employees টেবিল থেকে সমস্ত ডেটা রিটার্ন করবে।

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM Employees;
END;

এটি একটি সাধারণ স্টোরড প্রসিডিউর তৈরি করবে যা Employees টেবিল থেকে সব রেকর্ড নির্বাচন করবে। একবার এই স্টোরড প্রসিডিউরটি তৈরি হলে, আপনি এটি কল করে ডেটা নিতে পারবেন।

Stored Procedure কল করা:

EXEC GetAllEmployees;

উদাহরণ ২: Stored Procedure এর সঙ্গে প্যারামিটার ব্যবহার

আপনি যদি চান যে স্টোরড প্রসিডিউরটি নির্দিষ্ট মানের উপর ভিত্তি করে কাজ করুক, তাহলে আপনি Input Parameters ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে EmployeeID প্যারামিটার ব্যবহার করা হয়েছে:

CREATE PROCEDURE GetEmployeeDetails
    @EmployeeID INT
AS
BEGIN
    SELECT Name, Position FROM Employees WHERE EmployeeID = @EmployeeID;
END;

এখানে @EmployeeID একটি ইনপুট প্যারামিটার যা স্টোরড প্রসিডিউরের কল করার সময় মান হিসেবে প্রদান করতে হবে।

Stored Procedure কল করা:

EXEC GetEmployeeDetails @EmployeeID = 101;

এই কুয়েরিটি EmployeeID 101 থাকা কর্মচারীর নাম এবং পদ রিটার্ন করবে।


উদাহরণ ৩: Multiple Parameters সহ Stored Procedure

আপনি একাধিক প্যারামিটারও স্টোরড প্রসিডিউরে ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো যেখানে Name এবং Position প্যারামিটার ব্যবহার করা হয়েছে:

CREATE PROCEDURE GetEmployeeByPosition
    @Position VARCHAR(50),
    @MinSalary DECIMAL
AS
BEGIN
    SELECT Name, Position, Salary
    FROM Employees
    WHERE Position = @Position AND Salary >= @MinSalary;
END;

এটি স্টোরড প্রসিডিউর তৈরি করবে যা পজিশন এবং মিনিমাম বেতনের ভিত্তিতে কর্মচারীর ডেটা রিটার্ন করবে।

Stored Procedure কল করা:

EXEC GetEmployeeByPosition @Position = 'Developer', @MinSalary = 50000;

এই কুয়েরি শুধুমাত্র তাদের নাম, পদ এবং বেতন রিটার্ন করবে যারা Developer পজিশনে আছেন এবং তাদের বেতন ৫০,০০০ বা তার বেশি।


উদাহরণ ৪: Stored Procedure-এ Error Handling

T-SQL এ TRY...CATCH ব্লক ব্যবহার করে আপনি স্টোরড প্রসিডিউরের মধ্যে ত্রুটি হ্যান্ডলিংও যোগ করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:

CREATE PROCEDURE InsertEmployee
    @Name VARCHAR(100),
    @Position VARCHAR(50),
    @Salary DECIMAL
AS
BEGIN
    BEGIN TRY
        INSERT INTO Employees (Name, Position, Salary)
        VALUES (@Name, @Position, @Salary);
    END TRY
    BEGIN CATCH
        PRINT 'Error: ' + ERROR_MESSAGE();
    END CATCH;
END;

এটি একটি স্টোরড প্রসিডিউর তৈরি করবে যা Employees টেবিলে নতুন কর্মচারী ইনসার্ট করার চেষ্টা করবে। যদি কোনো ত্রুটি ঘটে, তবে তা ERROR_MESSAGE() এর মাধ্যমে ধরা যাবে এবং ত্রুটির বার্তা প্রিন্ট হবে।

Stored Procedure কল করা:

EXEC InsertEmployee @Name = 'John Doe', @Position = 'Manager', @Salary = 70000;

উদাহরণ ৫: Output Parameters সহ Stored Procedure

আপনি Output Parameters ব্যবহার করতে পারেন যা স্টোরড প্রসিডিউরের শেষে মান রিটার্ন করতে সহায়তা করে। নিচে একটি উদাহরণ দেওয়া হলো:

CREATE PROCEDURE GetEmployeeCount
    @Position VARCHAR(50),
    @EmployeeCount INT OUTPUT
AS
BEGIN
    SELECT @EmployeeCount = COUNT(*) 
    FROM Employees
    WHERE Position = @Position;
END;

এটি একটি স্টোরড প্রসিডিউর তৈরি করবে যা নির্দিষ্ট পজিশনের জন্য কর্মচারীর সংখ্যা রিটার্ন করবে।

Stored Procedure কল করা:

DECLARE @Count INT;
EXEC GetEmployeeCount @Position = 'Developer', @EmployeeCount = @Count OUTPUT;
PRINT @Count;

এই কুয়েরি Developer পজিশনের কর্মচারীর সংখ্যা রিটার্ন করবে এবং সেটি @Count ভেরিয়েবলে স্টোর হবে, যা পরবর্তীতে প্রিন্ট করা হবে।


সারাংশ

  • Stored Procedure একটি ডেটাবেস অবজেক্ট যা একাধিক SQL স্টেটমেন্টের গ্রুপ হিসেবে কাজ করে এবং এটি পুনরায় ব্যবহারের জন্য সংরক্ষিত থাকে।
  • CREATE PROCEDURE কমান্ড ব্যবহার করে আপনি স্টোরড প্রসিডিউর তৈরি করতে পারেন।
  • স্টোরড প্রসিডিউরকে ইনপুট, আউটপুট, বা ইনপুট/আউটপুট প্যারামিটার সহ কাস্টমাইজ করা যায়।
  • TRY...CATCH ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং যোগ করা সম্ভব।
  • OUTPUT প্যারামিটার ব্যবহার করে মান রিটার্ন করা সম্ভব।

Stored Procedure ডেটাবেস অ্যাপ্লিকেশনে কোডের পুনরাবৃত্তি কমায়, পারফরম্যান্স উন্নত করে এবং নিরাপত্তা বাড়ায়।

Content added By

Stored Procedure একটি প্রি-কম্পাইলড T-SQL স্টেটমেন্টের সেট, যা SQL Server ডাটাবেসে সংরক্ষিত থাকে এবং পুনরায় ব্যবহার করা যায়। স্টোরড প্রসিডিউর ব্যবহারের মাধ্যমে SQL কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি পায়।

Parameters সহ Stored Procedure তৈরি করার জন্য আপনাকে কিছু পদক্ষেপ অনুসরণ করতে হবে, যাতে স্টোরড প্রসিডিউরটি ডাইনামিকভাবে বিভিন্ন আর্গুমেন্ট গ্রহণ করে এবং কার্যক্রম সম্পাদন করতে পারে।


Stored Procedure তৈরি করার মূল Syntax

CREATE PROCEDURE ProcedureName
    @Parameter1 DataType,
    @Parameter2 DataType
AS
BEGIN
    -- SQL Statements
    -- Query using parameters
END;
  • ProcedureName: আপনার স্টোরড প্রসিডিউরের নাম।
  • @Parameter1, @Parameter2: এগুলি স্টোরড প্রসিডিউরের ইনপুট প্যারামিটার। @ চিহ্ন দিয়ে প্যারামিটারগুলো ডিফাইন করা হয়।
  • DataType: প্রতিটি প্যারামিটারের জন্য ডেটা টাইপ (যেমন INT, VARCHAR, DATE ইত্যাদি)।

Stored Procedure এর উদাহরণ

১. একটি সিম্পল Stored Procedure তৈরি করা (প্যারামিটার সহ)

ধরা যাক, আপনি একটি স্টোরড প্রসিডিউর তৈরি করতে চান যা একটি নির্দিষ্ট কর্মী আইডি (Employee ID) দিয়ে তাদের নাম এবং বয়স রিটার্ন করবে।

CREATE PROCEDURE GetEmployeeDetails
    @EmployeeID INT
AS
BEGIN
    SELECT Name, Age
    FROM Employees
    WHERE EmployeeID = @EmployeeID;
END;

এখানে:

  • @EmployeeID: একটি প্যারামিটার যা INT টাইপের।
  • স্টোরড প্রসিডিউরটি Employees টেবিল থেকে নির্দিষ্ট EmployeeID এর Name এবং Age রিটার্ন করবে।

Stored Procedure কল করা:

EXEC GetEmployeeDetails @EmployeeID = 101;

এটি EmployeeID = 101 এর তথ্য নির্বাচন করবে।


২. একাধিক প্যারামিটার সহ Stored Procedure

ধরা যাক, আপনি একটি স্টোরড প্রসিডিউর তৈরি করতে চান যা কর্মী ডিপার্টমেন্ট এবং বয়সের উপর ভিত্তি করে তাদের নাম রিটার্ন করবে। এখানে দুটি প্যারামিটার থাকবে — @Department এবং @MinAge

CREATE PROCEDURE GetEmployeesByDepartment
    @Department VARCHAR(50),
    @MinAge INT
AS
BEGIN
    SELECT Name
    FROM Employees
    WHERE Department = @Department
    AND Age >= @MinAge;
END;

এখানে:

  • @Department: কর্মীর ডিপার্টমেন্টের নাম (যেমন: "Sales", "HR" ইত্যাদি)।
  • @MinAge: একটি নির্দিষ্ট বয়স (কর্মী যাদের বয়স ঐ বয়সের সমান বা বড়)।

Stored Procedure কল করা:

EXEC GetEmployeesByDepartment @Department = 'Sales', @MinAge = 30;

এটি Sales ডিপার্টমেন্টের সকল কর্মীকে দেখাবে যাদের বয়স ৩০ এর বেশি।


প্যারামিটারগুলির জন্য ডিফল্ট মান নির্ধারণ

আপনি চাইলে প্যারামিটারগুলির জন্য ডিফল্ট মান (Default Value) নির্ধারণ করতে পারেন। এই ক্ষেত্রে, যখন আপনি স্টোরড প্রসিডিউরটি কল করবেন না, তখন ডিফল্ট মানটি ব্যবহার করা হবে।

CREATE PROCEDURE GetEmployeesByAge
    @MinAge INT = 18 -- ডিফল্ট মান 18
AS
BEGIN
    SELECT Name, Age
    FROM Employees
    WHERE Age >= @MinAge;
END;

Stored Procedure কল করা:

  • যদি আপনি প্যারামিটার প্রদান না করেন, তবে এটি @MinAge = 18 ব্যবহার করবে:

    EXEC GetEmployeesByAge;
    
  • যদি আপনি @MinAge প্রদান করেন, তবে এটি সেই মান ব্যবহার করবে:

    EXEC GetEmployeesByAge @MinAge = 25;
    

IN, OUT এবং INOUT প্যারামিটার

  • IN প্যারামিটার: এগুলি স্টোরড প্রসিডিউরে ডেটা ইনপুট করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, উপরে উল্লেখিত প্যারামিটারগুলির মতো।
  • OUT প্যারামিটার: এগুলি স্টোরড প্রসিডিউরের আউটপুট হিসেবে মান রিটার্ন করে।
  • INOUT প্যারামিটার: এটি ইনপুট এবং আউটপুট উভয় হিসেবে কাজ করে, মান পরিবর্তন করতে পারে।

OUT প্যারামিটার উদাহরণ:

CREATE PROCEDURE GetEmployeeCountByDepartment
    @Department VARCHAR(50),
    @EmployeeCount INT OUTPUT
AS
BEGIN
    SELECT @EmployeeCount = COUNT(*)
    FROM Employees
    WHERE Department = @Department;
END;

Stored Procedure কল করা:

DECLARE @Count INT;
EXEC GetEmployeeCountByDepartment @Department = 'HR', @EmployeeCount = @Count OUTPUT;
PRINT @Count;

এটি HR ডিপার্টমেন্টের কর্মীদের সংখ্যা আউটপুট হিসাবে রিটার্ন করবে।


সারাংশ

  • Stored Procedure হলো SQL স্টেটমেন্টের একটি সেট যা ডেটাবেসে সংরক্ষিত থাকে এবং পুনরায় ব্যবহার করা যায়।
  • Parameters সহ Stored Procedure ডাইনামিক ইনপুট প্রদান করতে সক্ষম হয়।
  • প্যারামিটারগুলি ব্যবহার করে আপনি SQL কোডকে আরও কাস্টমাইজড এবং পুনরায় ব্যবহারযোগ্য করতে পারেন।

এটি SQL Server-এ ডেটাবেস ব্যবস্থাপনার একটি শক্তিশালী পদ্ধতি।

Content added By

Stored Procedure (SP) হল একটি প্রোগ্রামেবল স্ক্রিপ্ট যা T-SQL এ লেখা হয় এবং SQL Server ডেটাবেসে সংরক্ষিত থাকে। এটি এক বা একাধিক SQL স্টেটমেন্টের একটি গ্রুপ হিসেবে কাজ করে যা ডেটাবেসে পুনরায় ব্যবহার করা যায়। Stored Procedure এর মাধ্যমে ডেটাবেসের কার্যক্রম যেমন ডেটা প্রবাহ, আপডেট, ইনসার্ট, ডিলিট ইত্যাদি আরও সুশৃঙ্খল ও কার্যকরীভাবে করা যায়।

Stored Procedure এর ব্যবহার

  • কাস্টম কাজ সম্পাদন: একাধিক SQL স্টেটমেন্ট একত্রে রেখে একটি নির্দিষ্ট কাজ সম্পাদন করতে।
  • পুনঃব্যবহারযোগ্য কোড: একবার তৈরি করা Stored Procedure বারবার কল করা যেতে পারে।
  • পারফরম্যান্স বৃদ্ধি: Stored Procedure কোড সার্ভারের ভিতরে রান হয়, যার ফলে ক্লায়েন্টের প্রতি SQL স্টেটমেন্টের রাউন্ড-ট্রিপ কমে যায়।
  • নিরাপত্তা: ডেটাবেস অ্যাক্সেসের নির্দিষ্ট অংশ নিয়ন্ত্রণ করতে, ব্যবহারকারীদের শুধুমাত্র Stored Procedure এর মাধ্যমে ডেটাবেসে কার্যক্রম করার অনুমতি দেয়া যায়।

Stored Procedure তৈরি এবং কল করার উদাহরণ

১. Stored Procedure তৈরি করা

ধরা যাক, আমাদের একটি Employees টেবিল আছে যার মধ্যে EmployeeID, EmployeeName, এবং Position কলাম রয়েছে। আমরা একটি Stored Procedure তৈরি করতে যাচ্ছি যা একটি নির্দিষ্ট Position এর সকল কর্মচারীর তথ্য রিটার্ন করবে।

-- Stored Procedure তৈরি করা
CREATE PROCEDURE GetEmployeesByPosition
    @Position VARCHAR(100)  -- ইনপুট প্যারামিটার
AS
BEGIN
    -- SELECT স্টেটমেন্ট
    SELECT EmployeeID, EmployeeName, Position
    FROM Employees
    WHERE Position = @Position;
END;

এখানে:

  • CREATE PROCEDURE: Stored Procedure তৈরি করার জন্য ব্যবহৃত স্টেটমেন্ট।
  • @Position: এটি একটি ইনপুট প্যারামিটার যা Stored Procedure কল করার সময় পাস করা হয়।
  • BEGIN...END: একাধিক SQL স্টেটমেন্ট নিয়ে একটি ব্লক তৈরি করা হয়, যাতে একসাথে কার্যকরী করা যায়।

২. Stored Procedure কল করা

আপনি যখন এই Stored Procedure কল করবেন, তখন ইনপুট প্যারামিটার হিসেবে Position এর মান পাস করতে হবে।

-- Stored Procedure কল করা
EXEC GetEmployeesByPosition @Position = 'Manager';

এটি Manager পজিশনের সকল কর্মচারীর তথ্য রিটার্ন করবে।


৩. Stored Procedure এর মধ্যে আউটপুট প্যারামিটার ব্যবহার

ধরা যাক, আমরা একটি Stored Procedure তৈরি করতে যাচ্ছি যা একজন কর্মচারীর মোট বেতন হিসাব করবে এবং সেই মান আউটপুট হিসেবে রিটার্ন করবে।

-- Stored Procedure আউটপুট প্যারামিটার সহ
CREATE PROCEDURE GetEmployeeSalary
    @EmployeeID INT,          -- ইনপুট প্যারামিটার
    @Salary DECIMAL OUTPUT    -- আউটপুট প্যারামিটার
AS
BEGIN
    -- Salary হিসাব করা
    SELECT @Salary = Salary
    FROM Employees
    WHERE EmployeeID = @EmployeeID;
    
    -- আউটপুট প্যারামিটার রিটার্ন করা
    PRINT 'Employee Salary: ' + CAST(@Salary AS VARCHAR);
END;

এখানে:

  • @Salary DECIMAL OUTPUT: এটি একটি আউটপুট প্যারামিটার যা Stored Procedure কল করার পর মান রিটার্ন করবে।
  • @Salary = Salary: এটি সংশ্লিষ্ট কর্মচারীর বেতন মানে আউটপুট প্যারামিটার @Salary তে সংরক্ষণ করবে।

Stored Procedure কল করা:

DECLARE @EmployeeSalary DECIMAL;

-- Stored Procedure কল করা
EXEC GetEmployeeSalary @EmployeeID = 1, @Salary = @EmployeeSalary OUTPUT;

-- আউটপুট দেখানো
PRINT 'The salary of Employee is: ' + CAST(@EmployeeSalary AS VARCHAR);

এখানে:

  • @Salary OUTPUT প্যারামিটারকে আউটপুট হিসেবে ব্যবহার করা হয়েছে এবং OUTPUT কীওয়ার্ডের মাধ্যমে সেই মান ফেরত পেয়ে ব্যবহার করা হয়েছে।

৪. Stored Procedure এ ট্রানজ্যাকশন ব্যবহার

কখনো কখনো, আপনার ডেটাবেসে একাধিক স্টেটমেন্ট একত্রে একযোগভাবে চালানো দরকার, যেমন INSERT, UPDATE বা DELETE স্টেটমেন্ট। এমন ক্ষেত্রে Transaction ব্যবহৃত হয় যাতে একসাথে সব স্টেটমেন্ট কার্যকর হয় এবং কোনো ত্রুটি ঘটলে পুরো কার্যক্রম রোলব্যাক করা যায়।

-- Stored Procedure with Transaction
CREATE PROCEDURE UpdateEmployeeSalary
    @EmployeeID INT,
    @NewSalary DECIMAL
AS
BEGIN
    BEGIN TRANSACTION;  -- ট্রানজ্যাকশন শুরু করা

    -- Salary আপডেট করা
    UPDATE Employees
    SET Salary = @NewSalary
    WHERE EmployeeID = @EmployeeID;

    -- যদি কোনো ত্রুটি না ঘটে, তবে ট্রানজ্যাকশন কমিট করা হবে
    COMMIT TRANSACTION;
    
    -- ত্রুটি হলে, রোলব্যাক
    IF @@ERROR <> 0
    BEGIN
        ROLLBACK TRANSACTION;
    END
END;

এখানে:

  • BEGIN TRANSACTION: ট্রানজ্যাকশন শুরু করা।
  • COMMIT TRANSACTION: সবকিছু সঠিক হলে পরিবর্তন সঞ্চয় করা।
  • ROLLBACK TRANSACTION: কোনো ত্রুটি হলে সব পরিবর্তন বাতিল করা।

Stored Procedure কল করা:

EXEC UpdateEmployeeSalary @EmployeeID = 1, @NewSalary = 5000;

৫. Stored Procedure এর সুবিধা

  1. পুনঃব্যবহারযোগ্যতা: একবার তৈরি করা Stored Procedure বারবার ব্যবহার করা যায়।
  2. পারফরম্যান্স: Stored Procedure ডেটাবেসে সংরক্ষিত থাকে এবং কোড এক্সিকিউট করার সময় বারবার ক্লায়েন্টের সাথে যোগাযোগ না করে কাজ সম্পাদন করা হয়, যা পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে।
  3. নিরাপত্তা: ডেটাবেস অ্যাক্সেস নিয়ন্ত্রণে সাহায্য করে, আপনি ব্যবহারকারীকে শুধুমাত্র Stored Procedure কল করার অনুমতি দিতে পারেন, টেবিলের সরাসরি অ্যাক্সেস না দিয়েই।
  4. ত্রুটি হ্যান্ডলিং: TRY...CATCH ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং করা যায়।

সারাংশ

  • Stored Procedure SQL Server-এ একাধিক SQL স্টেটমেন্ট একত্রে ব্যবহারের জন্য ব্যবহৃত হয়, যা পুনঃব্যবহারযোগ্য এবং কার্যকরী ডেটাবেস ম্যানেজমেন্টে সহায়ক।
  • এটি ইনপুট, আউটপুট প্যারামিটার গ্রহণ করতে পারে এবং Transaction, Error Handling, এবং Data Processing এর মতো শক্তিশালী বৈশিষ্ট্য সহ আসে।
  • Stored Procedure ডেটাবেসের কার্যক্রমের নিরাপত্তা, পারফরম্যান্স এবং কার্যকারিতা বৃদ্ধি করে।
Content added By
Promotion

Are you sure to start over?

Loading...