PL/SQL এর Stored Procedures এবং Functions

পিএল/এসকিউএল (PL/SQL) - Database Tutorials

393

Stored Procedures এবং Functions হল PL/SQL ব্লক যা ডেটাবেসে সংরক্ষণ করা হয় এবং যেগুলি পুনরায় ব্যবহৃত হতে পারে। এই দুইটি PL/SQL ইউনিট ডেটাবেসের অভ্যন্তরে নির্দিষ্ট কাজ সম্পাদন করার জন্য তৈরি করা হয়। তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা তাদের ব্যবহারকারীর জন্য উপযোগিতা নির্ধারণ করে।


Stored Procedures

Stored Procedure হল একটি PL/SQL প্রোগ্রাম ইউনিট যা নির্দিষ্ট কাজ সম্পাদন করতে ব্যবহৃত হয় এবং এটি কোনও মান রিটার্ন না করে (void function)। প্রোসিডিউর সাধারণত কোনও কার্যাবলী সম্পাদন করতে ব্যবহার করা হয় যেমন ডেটাবেস আপডেট, ইনসার্ট, ডিলিট, বা অন্য কোনও ধরনের লজিকাল প্রক্রিয়া।

Stored Procedure তৈরি করা

CREATE OR REPLACE PROCEDURE update_employee_salary (
    p_employee_id IN NUMBER,      -- Input parameter
    p_new_salary IN NUMBER        -- Input parameter
) IS
BEGIN
    -- Update the salary of the employee
    UPDATE employees
    SET salary = p_new_salary
    WHERE employee_id = p_employee_id;
    
    -- Commit the changes
    COMMIT;
END update_employee_salary;

ব্যাখ্যা:

  • এখানে update_employee_salary নামের একটি প্রোসিডিউর তৈরি করা হয়েছে যা employee_id এবং new_salary আর্গুমেন্ট হিসাবে গ্রহণ করে।
  • এটি নির্দিষ্ট কর্মচারীর salary আপডেট করে।

Stored Procedure কল করা

BEGIN
    -- Call the stored procedure
    update_employee_salary(1001, 5000);
END;

এখানে, 1001 কর্মচারীর employee_id এবং 5000 নতুন বেতন হিসেবে পাস করা হয়েছে। যখন এই প্রোসিডিউরটি কল করা হয়, তখন এটি কর্মচারীর বেতন আপডেট করবে।


PL/SQL Functions

Functions হল PL/SQL প্রোগ্রাম ইউনিট যা একটি মান রিটার্ন করে। ফাংশনগুলি সাধারণত একটি মান হিসাব করতে বা নির্দিষ্ট ডেটা রিটার্ন করতে ব্যবহৃত হয়। ফাংশনগুলির একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে তারা একটি রিটার্ন ভ্যালু প্রদান করে এবং SQL কুইরির মধ্যে সন্নিবেশিত হতে পারে, যেখানে স্টোরড প্রোসিডিউর সাধারণত এরকম হতে পারে না।

Function তৈরি করা

CREATE OR REPLACE FUNCTION calculate_bonus (
    p_salary IN NUMBER       -- Input parameter
) RETURN NUMBER IS
    v_bonus NUMBER;          -- Local variable for bonus calculation
BEGIN
    -- Calculate the bonus as 10% of the salary
    v_bonus := p_salary * 0.10;
    
    -- Return the bonus amount
    RETURN v_bonus;
END calculate_bonus;

ব্যাখ্যা:

  • calculate_bonus ফাংশনটি একটি বোনাস পরিমাণ হিসাব করে যা কর্মচারীর বেতনের 10%।
  • এটি একটি NUMBER রিটার্ন করে।

Function কল করা

DECLARE
    v_employee_bonus NUMBER;
BEGIN
    -- Call the function and store the result
    v_employee_bonus := calculate_bonus(5000);
    
    -- Output the calculated bonus
    DBMS_OUTPUT.PUT_LINE('Employee Bonus: ' || v_employee_bonus);
END;

এখানে, 5000 বেতন দেওয়া হচ্ছে, এবং ফাংশনটি সেই বেতনের 10% বোনাস হিসাব করে রিটার্ন করবে। রিটার্ন হওয়া বোনাসটি v_employee_bonus ভেরিয়েবলে সংরক্ষিত হবে।


Stored Procedure এবং Function এর মধ্যে পার্থক্য

বিষয়Stored ProcedureFunction
রিটার্ন ভ্যালুরিটার্ন ভ্যালু নেই।একটি মান রিটার্ন করে।
ব্যবহারসাধারণত ডেটাবেস পরিবর্তন (INSERT, UPDATE, DELETE) বা কার্যক্রম সম্পাদনের জন্য ব্যবহৃত।সাধারণত কোনো গণনা বা মান বের করার জন্য ব্যবহৃত।
SQL কুইরি তে ব্যবহারSQL কুইরির মধ্যে ব্যবহার করা যায় না।SQL কুইরির মধ্যে ব্যবহার করা যেতে পারে।
প্রথম উপাদানসাধারণত কোনও অপারেশন বা কার্য সম্পাদন করে।সাধারণত একটি মান রিটার্ন করে।
EXCEPTION HANDLINGException handling করা হয়।Exception handling করা হয়।

Stored Procedure এবং Function এর সুবিধা

Stored Procedure এর সুবিধা:

  1. কাস্টম কার্যাবলী: নির্দিষ্ট ডেটাবেস কার্যক্রম যেমন ইনসার্ট, আপডেট, ডিলিট করতে ব্যবহার করা যায়।
  2. Multiple Operations: একাধিক SQL স্টেটমেন্ট একসঙ্গে এক্সিকিউট করা যায়।
  3. Code Reusability: একাধিক জায়গায় ব্যবহার করা যায়, ফলে কোডের পুনরাবৃত্তি কমে যায়।

Function এর সুবিধা:

  1. মান হিসাব করা: ফাংশনগুলো সহজেই ক্যালকুলেশন বা নির্দিষ্ট মান রিটার্ন করতে ব্যবহৃত হয়।
  2. SQL Query তে ব্যবহার: ফাংশনকে SQL কুইরির মধ্যে কল করা যেতে পারে যেমন SELECT calculate_bonus(salary) FROM employees;
  3. Modularization: ডেটাবেস লজিককে আরও কার্যকরভাবে বিভাজন করতে সাহায্য করে।

Stored Procedure এবং Function এর বাস্তব উদাহরণ

  1. Stored Procedure:

    • একটি প্রোসিডিউর তৈরি করুন যা একটি নির্দিষ্ট ডিপার্টমেন্টের সকল কর্মচারীর বেতন 10% বাড়িয়ে দেবে।
    CREATE OR REPLACE PROCEDURE increase_salary (
        p_department_id IN NUMBER
    ) IS
    BEGIN
        UPDATE employees
        SET salary = salary * 1.10
        WHERE department_id = p_department_id;
        
        COMMIT;
    END;
    
    • এই প্রোসিডিউরটি একটি নির্দিষ্ট ডিপার্টমেন্টের কর্মচারীদের বেতন 10% বাড়িয়ে দেবে।
  2. Function:

    • একটি ফাংশন তৈরি করুন যা কর্মচারীর বেতন এবং কর্মী বয়সের ভিত্তিতে বোনাস রিটার্ন করবে।
    CREATE OR REPLACE FUNCTION calculate_bonus (
        p_salary IN NUMBER,
        p_age IN NUMBER
    ) RETURN NUMBER IS
        v_bonus NUMBER;
    BEGIN
        IF p_age < 30 THEN
            v_bonus := p_salary * 0.15;  -- 15% bonus for employees under 30
        ELSE
            v_bonus := p_salary * 0.10;  -- 10% bonus for employees 30 or older
        END IF;
        
        RETURN v_bonus;
    END;
    

সারাংশ:

  • Stored Procedures এবং Functions PL/SQL এর গুরুত্বপূর্ণ উপাদান যা পুনরায় ব্যবহারের জন্য কোড মডিউল তৈরি করতে সাহায্য করে।
  • Stored Procedures কোনো মান রিটার্ন না করে, সাধারণত কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়।
  • Functions একটি মান রিটার্ন করে এবং SQL কুইরির মধ্যে ব্যবহার করা যেতে পারে।
  • উভয়ই ডেটাবেস অপারেশন এবং লজিক প্রক্রিয়াকরণে কার্যকরী ভূমিকা পালন করে, এবং PL/SQL কোডের পুনরাবৃত্তি এবং জটিলতা কমাতে সাহায্য করে।
Content added By

PL/SQL তে Stored Procedures এবং Functions হলো কোডের ব্লক যা ডেটাবেসের মধ্যে সংরক্ষিত থাকে এবং যেগুলো পুনঃব্যবহারযোগ্য। এগুলো সাধারণত ডেটাবেসে প্রক্রিয়া সম্পাদন করার জন্য ব্যবহৃত হয়, যেমন ডেটা আপডেট, ইনসার্ট, ডিলিট বা কোনো কমপ্লেক্স ক্যালকুলেশন। একটি Procedure কোন মান ফেরত দেয় না, কিন্তু একটি Function অবশ্যই একটি মান ফেরত দেয়।

এখানে Stored Procedures এবং Functions তৈরি এবং ব্যবহার করার উদাহরণ দেয়া হলো।


Stored Procedure

একটি Stored Procedure হল একটি PL/SQL ব্লক যা একাধিক SQL কমান্ডকে একত্রিত করে এবং ডেটাবেসে সংরক্ষিত থাকে। এটি ডেটাবেসের অন্যান্য অংশ বা অ্যাপ্লিকেশন থেকে কল করা যেতে পারে।

Procedure তৈরি করা

CREATE OR REPLACE PROCEDURE increase_salary (emp_id IN NUMBER, increase_percentage IN NUMBER) 
IS
BEGIN
    UPDATE employees
    SET salary = salary + (salary * increase_percentage / 100)
    WHERE employee_id = emp_id;
    
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Salary updated for Employee ID: ' || emp_id);
END increase_salary;

Explanation:

  • increase_salary হল একটি procedure যেটি কর্মচারীর স্যালারি বৃদ্ধি করার জন্য ব্যবহার করা হয়।
  • এটি দুটি প্যারামিটার নেয়:
    • emp_id: কর্মচারীর আইডি যাদের স্যালারি আপডেট করতে হবে।
    • increase_percentage: স্যালারি বৃদ্ধি শতাংশ।
  • UPDATE স্টেটমেন্টের মাধ্যমে কর্মচারীর স্যালারি আপডেট করা হয় এবং শেষে COMMIT করা হয়।

Procedure কল করা

BEGIN
   increase_salary(101, 10);  -- Employee ID 101 এর স্যালারি 10% বৃদ্ধি
END;

Explanation:

  • increase_salary(101, 10) কল করার মাধ্যমে কর্মচারী ID 101 এর স্যালারি 10% বৃদ্ধি হবে।

Function

একটি Function একটি PL/SQL ব্লক যা একটি মান (যেমন একটি সংখ্যা বা স্ট্রিং) ফেরত দেয়। Functions সাধারণত ক্যালকুলেশন বা ট্রান্সফরমেশন করার জন্য ব্যবহৃত হয় এবং সাধারণত SELECT কুইরি, INSERT, UPDATE বা DELETE স্টেটমেন্টের অংশ হিসেবে ব্যবহার করা হয়।

Function তৈরি করা

CREATE OR REPLACE FUNCTION get_employee_salary (emp_id IN NUMBER) 
RETURN NUMBER
IS
    emp_salary NUMBER;
BEGIN
    SELECT salary INTO emp_salary
    FROM employees
    WHERE employee_id = emp_id;
    
    RETURN emp_salary;
END get_employee_salary;

Explanation:

  • get_employee_salary হল একটি function যা কর্মচারীর স্যালারি ফেরত দেয়।
  • emp_id প্যারামিটারটি কর্মচারীর আইডি যা ফাংশনের ইনপুট হিসেবে ব্যবহার করা হয়।
  • SELECT কুইরি ব্যবহার করে ডেটাবেস থেকে কর্মচারীর স্যালারি বের করে, এবং তা RETURN করা হয়।

Function কল করা

DECLARE
   emp_salary NUMBER;
BEGIN
   emp_salary := get_employee_salary(101);  -- Employee ID 101 এর স্যালারি বের করা
   DBMS_OUTPUT.PUT_LINE('Salary of Employee ID 101: ' || emp_salary);
END;

Explanation:

  • get_employee_salary(101) ফাংশন কল করে কর্মচারী ID 101 এর স্যালারি পাওয়া যাবে এবং তা emp_salary ভেরিয়েবলে সংরক্ষিত হবে।
  • এরপর DBMS_OUTPUT.PUT_LINE এর মাধ্যমে স্যালারি প্রিন্ট করা হবে।

Procedure এবং Function এর মধ্যে পার্থক্য

বৈশিষ্ট্যStored ProcedureFunction
Return Typeকোন মান ফেরত দেয় নাএকটি মান ফেরত দেয় (যেমন NUMBER, VARCHAR2)
Usageসাধারণত ডেটাবেস অপারেশন (যেমন INSERT, UPDATE, DELETE) করার জন্য ব্যবহৃত হয়ডেটা রিটার্ন বা ক্যালকুলেশন করার জন্য ব্যবহৃত হয়
CallCALL স্টেটমেন্ট ব্যবহার করা হয়সাধারণ SQL কুইরি বা PL/SQL ব্লকে ব্যবহার করা হয়
Can be Used in SELECTনা, সরাসরি SELECT কুইরিতে ব্যবহার করা যায় নাহ্যাঁ, SELECT কুইরিতে ব্যবহৃত হতে পারে

Procedure এবং Function এর ক্ষেত্রে কিছু ভাল অনুশীলন

  1. Procedures সাধারণত COMMIT বা ROLLBACK করতে না দেওয়া ভাল, কারণ ডেটাবেসের ট্রানজেকশন নিয়ন্ত্রণ করা Application Layer এর কাজ হওয়া উচিত।
  2. Functions সাধারণত শুধুমাত্র মান ফেরত দেয়, তারা ডেটাবেসে কোনো পরিবর্তন বা অপারেশন সম্পাদন করে না।
  3. যখন একাধিক ডেটাবেস অপারেশন করতে হয়, তখন Stored Procedure ব্যবহার করা উচিত। যদি শুধু একক মান বা ক্যালকুলেশন প্রয়োজন হয়, তবে Function উপযুক্ত।

Exception Handling in Procedures and Functions

ডেটাবেস অপারেশন চলাকালীন ত্রুটি হ্যান্ডলিং অত্যন্ত গুরুত্বপূর্ণ। PL/SQL তে ত্রুটি হ্যান্ডলিং এর জন্য EXCEPTION ব্লক ব্যবহার করা হয়।

Procedure এ Exception Handling

CREATE OR REPLACE PROCEDURE increase_salary (emp_id IN NUMBER, increase_percentage IN NUMBER) 
IS
BEGIN
    UPDATE employees
    SET salary = salary + (salary * increase_percentage / 100)
    WHERE employee_id = emp_id;

    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Salary updated for Employee ID: ' || emp_id);

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No data found for Employee ID: ' || emp_id);
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END increase_salary;

Function এ Exception Handling

CREATE OR REPLACE FUNCTION get_employee_salary (emp_id IN NUMBER) 
RETURN NUMBER
IS
    emp_salary NUMBER;
BEGIN
    SELECT salary INTO emp_salary
    FROM employees
    WHERE employee_id = emp_id;

    RETURN emp_salary;

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RETURN 0;  -- Return 0 if no data found
    WHEN OTHERS THEN
        RETURN -1; -- Return -1 if an error occurs
END get_employee_salary;

Conclusion

  • Stored Procedures এবং Functions PL/SQL এর অত্যন্ত গুরুত্বপূর্ণ উপাদান, যেগুলি ডেটাবেসের মধ্যে পুনঃব্যবহারযোগ্য কোড তৈরির জন্য ব্যবহৃত হয়।
  • Stored Procedures সাধারণত ডেটাবেসে পরিবর্তন করার জন্য ব্যবহৃত হয়, যেখানে Functions সাধারণত ক্যালকুলেশন বা মান ফেরত দেওয়ার জন্য ব্যবহৃত হয়।
  • Proper exception handling, efficient use of parameters, এবং logical structuring code তে দক্ষতা বৃদ্ধি করে এবং পারফরম্যান্স উন্নত করে।
Content added By

PL/SQL-এ Functions এবং Procedures উভয়ই খুব গুরুত্বপূর্ণ অবজেক্ট, যেগুলি কোড পুনঃব্যবহারযোগ্য এবং সংগঠিত করার জন্য ব্যবহৃত হয়। এই ফাংশন এবং প্রোসিডিউরগুলোতে Parameters ব্যবহার করার মাধ্যমে, ডেটা অ্যাক্সেস এবং প্রক্রিয়া করতে সহায়ক হয়। Parameters ব্যবস্থাপনা কার্যকরভাবে কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়ায়।

ফাংশন এবং প্রোসিডিউরের মধ্যে পার্থক্য

  • Function:
    • একটি ফাংশন একটি ভ্যালু রিটার্ন করে। এটি সাধারণত একটি একক ভ্যালু বা একটি ফলাফল প্রদান করার জন্য ব্যবহৃত হয়।
    • ফাংশনকে সাধারণত SQL কোয়েরি বা অন্য কোন PL/SQL কোডের মধ্যে কল করা যায়।
  • Procedure:
    • একটি প্রোসিডিউর কোন ভ্যালু রিটার্ন করে না, তবে এটি কোনো নির্দিষ্ট কার্যপদ্ধতি সম্পাদন করে, যেমন ডেটাবেসে ইনসার্ট, আপডেট, অথবা ডিলিট।
    • প্রোসিডিউর সাধারণত প্রক্রিয়াগুলি সম্পাদন করার জন্য ব্যবহৃত হয় এবং এটি কল করার সময় আর্গুমেন্ট পাস করতে হয়।

Parameters Types

PL/SQL-এ ফাংশন এবং প্রোসিডিউরে তিন ধরনের প্যারামিটার ব্যবহৃত হয়:

  1. IN (Input Parameter):
    • IN প্যারামিটার হল ডিফল্ট প্যারামিটার, যা ফাংশন বা প্রোসিডিউরে ইনপুট হিসেবে প্রদান করা হয়। এটি শুধুমাত্র ফাংশন বা প্রোসিডিউরের ভিতরে পড়া যেতে পারে এবং তার মান পরিবর্তন করা যায় না।
    • উদাহরণ: ডেটা গ্রহণ করা, যেমন: এক্সিকিউট করার জন্য কোন মান প্রদান করা।
  2. OUT (Output Parameter):
    • OUT প্যারামিটার ব্যবহার করে ফাংশন বা প্রোসিডিউর থেকে ডেটা আউটপুট করা হয়। এটি ফাংশন বা প্রোসিডিউরের ভিতরে মান পরিবর্তন করতে দেয় এবং সেই পরিবর্তিত মান কলিং স্কোপে ফিরে আসে।
    • উদাহরণ: কোন ফলাফল প্রদান করা, যেমন কোন ক্যালকুলেশন বা ভ্যালু সেট করা।
  3. IN OUT (Input and Output Parameter):
    • IN OUT প্যারামিটার একে ইনপুট হিসেবে গ্রহণ করে এবং পরে আউটপুট প্রদান করে। অর্থাৎ, এটি ফাংশন বা প্রোসিডিউরে মান পাঠানোর পাশাপাশি সেই মান পরিবর্তনও করতে পারে।
    • উদাহরণ: মান পরিবর্তন করার প্রয়োজন যেখানে আপনি আর্গুমেন্ট পাঠান এবং পরবর্তীতে পরিবর্তিত মান পেতে চান।

Function এবং Procedure তৈরি এবং Parameters ব্যবস্থাপনা

এখন আমরা দেখব কীভাবে ফাংশন এবং প্রোসিডিউর তৈরি করা হয় এবং কীভাবে তাদের সাথে প্যারামিটার ব্যবস্থাপনা করা হয়।

1. Function তৈরি এবং Parameters ব্যবস্থাপনা

-- Function Example with Parameters
CREATE OR REPLACE FUNCTION get_employee_salary (
    p_emp_id IN employees.employee_id%TYPE
) RETURN employees.salary%TYPE
IS
    v_salary employees.salary%TYPE;
BEGIN
    -- Fetching salary from employees table based on emp_id
    SELECT salary INTO v_salary
    FROM employees
    WHERE employee_id = p_emp_id;
    
    -- Returning the salary value
    RETURN v_salary;
END;

এখানে, get_employee_salary ফাংশনটি IN প্যারামিটার হিসাবে p_emp_id গ্রহণ করে, এবং সেই কর্মচারীর বেতন রিটার্ন করে। এই ফাংশনটিকে employee_id অনুযায়ী বেতন বের করার জন্য ব্যবহৃত হবে।

ফাংশন কল করা:
DECLARE
    v_salary employees.salary%TYPE;
BEGIN
    v_salary := get_employee_salary(101);  -- Call the function with employee ID 101
    DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;

এই কোডে, get_employee_salary ফাংশনটি কল করা হচ্ছে এবং প্যারামিটার হিসেবে 101 পাস করা হচ্ছে, যা ফাংশনের ভিতরে ব্যবহৃত হবে।


2. Procedure তৈরি এবং Parameters ব্যবস্থাপনা

-- Procedure Example with Parameters
CREATE OR REPLACE PROCEDURE update_employee_salary (
    p_emp_id IN employees.employee_id%TYPE,
    p_new_salary IN OUT employees.salary%TYPE
) IS
BEGIN
    -- Updating employee salary
    UPDATE employees
    SET salary = p_new_salary
    WHERE employee_id = p_emp_id;
    
    -- Returning the updated salary
    SELECT salary INTO p_new_salary
    FROM employees
    WHERE employee_id = p_emp_id;
    
    COMMIT;
END;

এখানে, update_employee_salary একটি প্রোসিডিউর যা দুটি প্যারামিটার নেয়:

  • p_emp_id (IN): এটি কর্মচারীর আইডি ইনপুট হিসেবে নেয়।
  • p_new_salary (IN OUT): এটি নতুন বেতন গ্রহণ করে এবং সেই বেতন পরিবর্তন করার পর আউটপুট হিসেবে প্রদান করে।
Procedure Call Example:
DECLARE
    v_emp_id employees.employee_id%TYPE := 101;
    v_new_salary employees.salary%TYPE := 5000;
BEGIN
    -- Call the procedure to update the salary
    update_employee_salary(v_emp_id, v_new_salary);
    
    -- Display the updated salary
    DBMS_OUTPUT.PUT_LINE('Updated Salary: ' || v_new_salary);
END;

এখানে, update_employee_salary প্রোসিডিউরটি কল করা হচ্ছে এবং v_emp_id এবং v_new_salary প্যারামিটার হিসাবে পাস করা হচ্ছে। প্রোসিডিউরটির মাধ্যমে বেতন আপডেট করার পর পরিবর্তিত বেতন আউটপুট হিসেবে পাওয়া যাবে।


Parameters ব্যবস্থাপনার সেরা অভ্যাস (Best Practices)

  1. IN প্যারামিটার ব্যবহার করা যখন শুধুমাত্র ডেটা প্রেরণ করতে হয়:
    যখন আপনি শুধুমাত্র ফাংশন বা প্রোসিডিউরে ডেটা পাঠাচ্ছেন এবং সেই ডেটা পরিবর্তন করা প্রয়োজন নয়, তখন IN প্যারামিটার ব্যবহার করা উচিত।
  2. OUT প্যারামিটার ব্যবহার করা যখন ফলাফল ফেরত দিতে হয়:
    প্রোসিডিউর বা ফাংশন থেকে যদি কোনো ফলাফল বা মান ফেরত দিতে হয়, তবে OUT প্যারামিটার ব্যবহার করুন।
  3. IN OUT প্যারামিটার ব্যবহার করা যখন ডেটা প্রেরণ এবং ফেরত দুইটাই করতে হয়:
    যখন আপনি কোন মান প্রেরণ করতে চান এবং সেই মানকে পরিবর্তন করে ফেরত চান, তখন IN OUT প্যারামিটার ব্যবহার করুন।
  4. Proper Data Types ব্যবহার করা:
    ফাংশন এবং প্রোসিডিউর তৈরি করার সময়, প্যারামিটার ডেটা টাইপের সাথে মিল রেখে সঠিক ডেটা টাইপ ব্যবহার করুন। এতে কোডের কার্যক্ষমতা এবং ডেটা সঠিকতা নিশ্চিত হয়।
  5. Default Values ব্যবহার করা:
    যখন কোনো প্যারামিটার অপরিহার্য না হয়, তখন আপনি ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে কল করার সময় সেই প্যারামিটার না দিয়েও ফাংশন বা প্রোসিডিউরটি কল করা যায়।

উপসংহার

PL/SQL-এ ফাংশন এবং প্রোসিডিউরগুলির সাথে প্যারামিটার ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ। সঠিকভাবে প্যারামিটার ব্যবহার করলে কোড আরও নমনীয়, পুনঃব্যবহারযোগ্য এবং পারফর্মেন্সে উন্নত হয়। IN, OUT, এবং IN OUT প্যারামিটার ব্যবহার করে, আপনি ফাংশন এবং প্রোসিডিউরগুলির কার্যকারিতা বৃদ্ধি করতে পারেন এবং আপনার কোডকে আরও শক্তিশালী করতে পারেন।

Content added By

PL/SQL-এ Functions এবং Procedures হল দুটি মৌলিক প্রোগ্রামিং কন্সট্রাক্ট যা পুনঃব্যবহারযোগ্য কোড ব্লক তৈরি করতে সাহায্য করে। এই দুটি ব্যবহার করে আপনি কোডের কার্যকারিতা নির্দিষ্ট করতে পারেন, এবং তারা সাধারণত ডেটাবেসে বিভিন্ন ক্রিয়াকলাপ সম্পাদন করতে ব্যবহৃত হয়।

1. Function এর উদাহরণ

Function হল একটি প্রোগ্রামিং ব্লক যা একটি মান ফিরিয়ে দেয়। এটি সাধারণত ডেটাবেসের ক্যালকুলেশন বা মানের প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।

Function Syntax:
CREATE OR REPLACE FUNCTION get_salary(emp_id IN NUMBER) 
RETURN NUMBER IS
    emp_salary NUMBER;
BEGIN
    -- Query to fetch the salary for a given employee
    SELECT salary INTO emp_salary
    FROM employees
    WHERE employee_id = emp_id;
    
    RETURN emp_salary;
END get_salary;

এই উদাহরণে:

  • get_salary হল একটি function যা employee ID (emp_id) ইনপুট হিসেবে নেয় এবং সেই employee এর salary ফেরত দেয়।
  • RETURN স্টেটমেন্ট ব্যবহার করে emp_salary ভেরিয়েবলটি রিটার্ন করা হয়।
  • এই ফাংশনটি আপনাকে employee_id এর ভিত্তিতে salary বের করতে সাহায্য করবে।
Function ব্যবহার:
DECLARE
    emp_salary NUMBER;
BEGIN
    -- Calling the function and storing the returned value
    emp_salary := get_salary(101);
    DBMS_OUTPUT.PUT_LINE('Salary: ' || emp_salary);
END;

এখানে:

  • get_salary(101) কল করে employee ID 101 এর salary নিয়ে আসা হচ্ছে।

2. Procedure এর উদাহরণ

Procedure হল একটি প্রোগ্রামিং ব্লক যা কিছু কার্যক্রম সম্পাদন করে এবং কোন মান ফেরত দেয় না। এটি সাধারণত ডেটাবেসে INSERT, UPDATE, DELETE বা অন্যান্য অপারেশন সম্পাদন করার জন্য ব্যবহৃত হয়।

Procedure Syntax:
CREATE OR REPLACE PROCEDURE update_salary(emp_id IN NUMBER, salary_increment IN NUMBER) IS
BEGIN
    -- Update the salary of an employee by a given increment
    UPDATE employees
    SET salary = salary + salary_increment
    WHERE employee_id = emp_id;
    
    COMMIT;  -- Save the changes to the database
END update_salary;

এই উদাহরণে:

  • update_salary হল একটি procedure যা employee ID (emp_id) এবং salary increment (salary_increment) ইনপুট নেয় এবং সংশ্লিষ্ট employee এর salary আপডেট করে।
  • এটি কোন মান ফেরত দেয় না; তবে, UPDATE স্টেটমেন্টের মাধ্যমে ডেটাবেসের salary পরিবর্তন করে।
Procedure ব্যবহার:
BEGIN
    -- Calling the procedure to update the salary of employee with ID 101
    update_salary(101, 5000);
    DBMS_OUTPUT.PUT_LINE('Salary Updated for Employee ID: 101');
END;

এখানে:

  • update_salary(101, 5000) কল করে employee ID 101 এর salary 5000 টাকা বাড়ানো হচ্ছে।

Functions এবং Procedures এর পার্থক্য

বিষয়FunctionProcedure
ফিরিয়ে দেয়একটি মান (value) ফিরিয়ে দেয়কোন মান ফিরিয়ে দেয় না (Void)
ব্যবহারExpression-এর মধ্যে ব্যবহার করা যায় (যেমন, SELECT, INSERT)Independent স্টেটমেন্ট হিসেবে ব্যবহৃত হয়
ফিরিয়ে দেওয়ার ধরনRETURN স্টেটমেন্ট দিয়ে মান রিটার্ন করেRETURN স্টেটমেন্ট ব্যবহার করা হয় না
কলিংExpression বা স্টেটমেন্টে কল করা যায়Statement-এ কল করা হয়
ইনপুট প্যারামিটারসাধারণত ইনপুট প্যারামিটার নেয় এবং তা ব্যবহার করেইনপুট, আউটপুট অথবা ইনআউট প্যারামিটার নিতে পারে

আরও উদাহরণ

Function উদাহরণ 2:

একটি function যেটি দুটি সংখ্যা যোগ করে ফিরিয়ে দিবে:

CREATE OR REPLACE FUNCTION add_numbers(num1 IN NUMBER, num2 IN NUMBER)
RETURN NUMBER IS
BEGIN
    RETURN num1 + num2;
END add_numbers;

ব্যবহার:

DECLARE
    result NUMBER;
BEGIN
    result := add_numbers(10, 20);
    DBMS_OUTPUT.PUT_LINE('Sum is: ' || result);
END;

Procedure উদাহরণ 2:

একটি procedure যেটি কোনো employee এর নাম পরিবর্তন করবে:

CREATE OR REPLACE PROCEDURE update_employee_name(emp_id IN NUMBER, new_name IN VARCHAR2) IS
BEGIN
    UPDATE employees
    SET first_name = new_name
    WHERE employee_id = emp_id;
    COMMIT;
END update_employee_name;

ব্যবহার:

BEGIN
    update_employee_name(101, 'John Doe');
    DBMS_OUTPUT.PUT_LINE('Employee Name Updated');
END;

Conclusion

  • Functions সাধারণত কোনো মান ফিরিয়ে দেয় এবং এর ফলাফল expression বা calculation এর অংশ হিসেবে ব্যবহার করা হয়।
  • Procedures সাধারণত কোনো কার্যক্রম সম্পাদন করতে ব্যবহৃত হয় এবং কোনো মান ফিরিয়ে দেয় না। এটি বিভিন্ন কাজ (INSERT, UPDATE, DELETE) সম্পাদন করার জন্য ব্যবহার হয়।

PL/SQL-এ Functions এবং Procedures উভয়ই কোড পুনঃব্যবহারযোগ্যতা, নির্ভরযোগ্যতা এবং সংগঠনের জন্য অপরিহার্য।

Content added By

PL/SQL (Procedural Language/Structured Query Language) এর মধ্যে Procedure এবং Function হল দুটি গুরুত্বপূর্ণ উপাদান, যা ডেটাবেস অপারেশন পরিচালনা করতে ব্যবহৃত হয়।

  • Procedure হল একটি ব্লক যা একটি নির্দিষ্ট কাজ করে এবং কিছু রিটার্ন করে না। এটি কার্যকরী কোডের একত্রিত সেট হিসেবে কাজ করে।
  • Function হল একটি ব্লক যা একটি মান রিটার্ন করে। এটি সাধারণত কোনো গণনা বা ডেটা প্রসেসিং করতে ব্যবহৃত হয় এবং এটি কোনো মান (value) রিটার্ন করতে বাধ্য।

Procedure কল করা

PL/SQL এ Procedure কল করার জন্য আপনাকে EXECUTE কমান্ড ব্যবহার করতে হয়। প্রক্রিয়া কল করার জন্য একটি BEGIN এবং END ব্লক এর মধ্যে কোড ব্যবহার করা হয়।

Procedure তৈরি করা:

CREATE OR REPLACE PROCEDURE greet_user (p_name IN VARCHAR2) IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name);
END greet_user;

এখানে, greet_user নামে একটি Procedure তৈরি করা হয়েছে, যা একটি ইনপুট প্যারামিটার p_name গ্রহণ করে এবং তাকে হ্যালো সিস্টেম আউটপুট হিসেবে প্রিন্ট করে।

Procedure কল করা:

Procedure কল করার জন্য EXECUTE বা BEGIN...END ব্লক ব্যবহার করা যায়।

  1. EXECUTE কমান্ডের মাধ্যমে কল:

    EXECUTE greet_user('John');
    
  2. BEGIN...END ব্লক দিয়ে কল:

    BEGIN
       greet_user('John');
    END;
    

এখানে, greet_user('John') কল করলে আউটপুট হবে: Hello, John


Function কল করা

Function এর মাধ্যমে একটি মান রিটার্ন করা হয়, সুতরাং একটি SELECT স্টেটমেন্টে অথবা কোনো PL/SQL ব্লক এর মধ্যে ফাংশন কল করা যায়।

Function তৈরি করা:

CREATE OR REPLACE FUNCTION add_numbers (p_num1 IN NUMBER, p_num2 IN NUMBER) 
RETURN NUMBER IS
BEGIN
    RETURN p_num1 + p_num2;
END add_numbers;

এখানে, add_numbers নামে একটি ফাংশন তৈরি করা হয়েছে, যা দুটি সংখ্যা যোগ করে এবং ফলাফল রিটার্ন করে।

Function কল করা:

  1. SELECT স্টেটমেন্টে ফাংশন কল:

    SELECT add_numbers(10, 20) FROM dual;
    

    এখানে, add_numbers(10, 20) ফাংশন কল করলে ফলাফল হবে: 30

  2. PL/SQL ব্লকে ফাংশন কল:

    DECLARE
       v_result NUMBER;
    BEGIN
       v_result := add_numbers(10, 20);
       DBMS_OUTPUT.PUT_LINE('The sum is: ' || v_result);
    END;
    

    এই ব্লকে, add_numbers(10, 20) ফাংশন কল করা হচ্ছে এবং তার রিটার্ন মান v_result ভেরিয়েবলে রাখা হচ্ছে। আউটপুট হবে: The sum is: 30


Procedure এবং Function এর মধ্যে পার্থক্য

বৈশিষ্ট্যProcedureFunction
Return Valueকোনো মান রিটার্ন করে নাএকটি মান রিটার্ন করে
ব্যবহারপ্রধানত কার্যকরী কাজের জন্য ব্যবহার হয়সাধারণত মানের গণনা বা প্রসেসিংয়ের জন্য ব্যবহার হয়
ডাটা ম্যানিপুলেশনডাটা ম্যানিপুলেশন করতে পারেশুধুমাত্র একটি মান প্রদান করে
কল করার পদ্ধতিEXECUTE বা BEGIN...END ব্লক দিয়েSELECT স্টেটমেন্ট বা PL/SQL ব্লক দিয়ে

Procedure এবং Function এর কলের বাস্তব উদাহরণ

Procedure কলের উদাহরণ:

-- Procedure Create
CREATE OR REPLACE PROCEDURE employee_details (p_employee_id IN NUMBER) IS
   v_name VARCHAR2(100);
BEGIN
   SELECT first_name || ' ' || last_name INTO v_name
   FROM employees
   WHERE employee_id = p_employee_id;
   DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
END employee_details;

-- Procedure Call in PL/SQL Block
BEGIN
   employee_details(100); -- 100 is the employee_id
END;

এখানে, employee_details নামে একটি procedure তৈরি করা হয়েছে যা কর্মচারীর ID এর ভিত্তিতে তাদের নাম প্রদান করে।


Function কলের উদাহরণ:

-- Function Create
CREATE OR REPLACE FUNCTION get_employee_salary (p_employee_id IN NUMBER)
RETURN NUMBER IS
   v_salary NUMBER;
BEGIN
   SELECT salary INTO v_salary
   FROM employees
   WHERE employee_id = p_employee_id;
   RETURN v_salary;
END get_employee_salary;

-- Function Call in PL/SQL Block
DECLARE
   v_salary NUMBER;
BEGIN
   v_salary := get_employee_salary(100); -- 100 is the employee_id
   DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;

এখানে, get_employee_salary নামে একটি function তৈরি করা হয়েছে যা কর্মচারীর ID এর ভিত্তিতে তাদের বেতন রিটার্ন করে।


Procedure এবং Function এর কল করার চ্যালেঞ্জ এবং Best Practices

  1. Error Handling: ফাংশন বা প্রোসিডিউর কল করার সময় কোনো ত্রুটি ঘটলে তা যথাযথভাবে EXCEPTION HANDLING ব্যবহার করে সমাধান করতে হবে।
  2. Parameter Validation: ইনপুট প্যারামিটারগুলোর ভ্যালিডেশন করা উচিত যাতে ভুল ডেটা ফাংশন বা প্রোসিডিউরে প্রবাহিত না হয়।
  3. Performance Optimization: যদি অনেক ডেটা প্রসেস করতে হয়, তবে BULK COLLECT বা FORALL ব্যবহার করে কোডের পারফরম্যান্স উন্নত করা উচিত।
  4. Reusable Code: Procedure এবং Function গুলি পুনরায় ব্যবহারের উপযোগী হতে হবে, যাতে একাধিক জায়গায় এগুলি কল করা যায়।

এইভাবে PL/SQL-এ Procedure এবং Function কল করা হয় এবং এগুলির মধ্যে পার্থক্য ও বাস্তব উদাহরণগুলি দেওয়া হয়েছে।

Content added By
Promotion

Are you sure to start over?

Loading...