Database Tutorials Stored Procedures এবং Functions গাইড ও নোট

291

Stored Procedures এবং Functions হল PostgreSQL ডেটাবেসের গুরুত্বপূর্ণ উপাদান, যা ডেটাবেসের মধ্যে লজিক এবং কমপ্লেক্স অপারেশনগুলি স্বয়ংক্রিয়ভাবে এবং কার্যকরভাবে সম্পাদন করতে ব্যবহৃত হয়। এগুলি আপনাকে SQL কোডের পুনরায় ব্যবহারযোগ্য অংশ তৈরি করতে এবং ডেটাবেসে প্রক্রিয়াগুলি সংগঠিত করতে সহায়তা করে।


1. Stored Procedures

Stored Procedures হল একধরনের প্রোগ্রাম যা ডেটাবেসে সংরক্ষিত থাকে এবং এক বা একাধিক SQL কুয়েরি এবং লজিকের মধ্যে একত্রিত হয়। এটি CALL কমান্ড ব্যবহার করে এক্সিকিউট করা হয়।

a. Stored Procedure তৈরি করা (Creating a Stored Procedure)

PostgreSQL তে Stored Procedure তৈরি করতে CREATE PROCEDURE কমান্ড ব্যবহার করা হয়। এতে আমরা কোন ইনপুট প্যারামিটার এবং আউটপুট বিবরণ সংজ্ঞায়িত করতে পারি।

CREATE PROCEDURE update_student_grade(IN student_id INT, IN new_grade CHAR)
LANGUAGE plpgsql
AS BEGINUPDATEstudentsSETgrade=newgradeWHEREstudentid=studentid;END;
BEGIN
    UPDATE students
    SET grade = new_grade
    WHERE student_id = student_id;
END;
;

এখানে, update_student_grade নামক একটি Stored Procedure তৈরি করা হয়েছে যা student_id এবং new_grade প্যারামিটার গ্রহণ করে এবং সংশ্লিষ্ট ছাত্রের grade আপডেট করে।

b. Stored Procedure কল করা (Calling a Stored Procedure)

CALL কমান্ডের মাধ্যমে Stored Procedure এক্সিকিউট করা হয়।

CALL update_student_grade(1, 'A');

এটি student_id 1 এর ছাত্রের grade কলামের মান A তে আপডেট করবে।

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

  • একাধিক SQL অপারেশন একত্রিত করা যায়।
  • কোড পুনঃব্যবহারযোগ্য করে তোলে।
  • ডেটাবেসের লজিক সার্ভার সাইডে রাখার মাধ্যমে ক্লায়েন্ট সাইডের লোড কমানো যায়।

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

  • Stored Procedure তে কোন রিটার্ন ভ্যালু নেই। তবে, আউটপুট প্যারামিটার ব্যবহার করা যেতে পারে।

2. Functions

Functions হল সঠিকভাবে সংজ্ঞায়িত কাজগুলি যা ডেটাবেসে সংরক্ষিত থাকে এবং একটি আর্গুমেন্টের মাধ্যমে প্রক্রিয়া সম্পাদন করে। Functions ডেটাবেসে SQL কুয়েরি এবং লজিক সঞ্চালন করতে ব্যবহৃত হয় এবং এটি ডেটাবেসের অন্যান্য অংশের সাথে সহজে একত্রিত হতে পারে।

a. Function তৈরি করা (Creating a Function)

PostgreSQL তে Function তৈরি করতে CREATE FUNCTION কমান্ড ব্যবহার করা হয়। Functions সাধারণত একটি রিটার্ন ভ্যালু প্রদান করে।

CREATE FUNCTION get_student_grade(student_id INT) 
RETURNS CHAR
LANGUAGE plpgsql
AS DECLAREstudentgradeCHAR;BEGINSELECTgradeINTOstudentgradeFROMstudentsWHEREid=studentid;RETURNstudentgrade;END;
DECLARE
    student_grade CHAR;
BEGIN
    SELECT grade INTO student_grade
    FROM students
    WHERE id = student_id;
    RETURN student_grade;
END;
;

এখানে, get_student_grade নামক একটি ফাংশন তৈরি করা হয়েছে যা student_id গ্রহণ করে এবং সংশ্লিষ্ট ছাত্রের গ্রেড রিটার্ন করে।

b. Function কল করা (Calling a Function)

ফাংশন কল করতে SELECT কমান্ড ব্যবহার করা হয়।

SELECT get_student_grade(1);

এটি student_id 1 এর ছাত্রের গ্রেড ফিরিয়ে দেবে।

c. Function এর সুবিধা

  • ফাংশন রিটার্ন ভ্যালু প্রদান করে, যা অন্যান্য SQL কুয়েরির সাথে একত্রিত হতে পারে।
  • ফাংশন ডেটাবেসে বিভিন্ন কার্যকলাপ একত্রিত করতে সহায়তা করে।
  • ফাংশনগুলো খুব দ্রুত চালানো যেতে পারে, কারণ তারা ডেটাবেসের ভিতরে সংরক্ষিত থাকে।

d. Function এর সীমাবদ্ধতা

  • Functions সাধারণত শুধুমাত্র একক রিটার্ন ভ্যালু প্রদান করতে পারে।
  • এটি একটি নির্দিষ্ট টেবিলের সাথে যুক্ত হয়ে কাজ করে না, যদিও উপযুক্ত প্যারামিটার দিয়ে টেবিল নির্ধারণ করা যেতে পারে।

3. Stored Procedures এবং Functions এর মধ্যে পার্থক্য

বৈশিষ্ট্যStored ProcedureFunction
ফাংশনের উদ্দেশ্যবিভিন্ন SQL অপারেশন একত্রিত করে কাজ সম্পন্নএকক কাজ বা কুয়েরি সম্পাদন করা এবং রিটার্ন ভ্যালু প্রদান
রিটার্ন ভ্যালুরিটার্ন ভ্যালু নেইরিটার্ন ভ্যালু থাকতে পারে
কল করার উপায়CALL কমান্ড দিয়েSELECT কমান্ড দিয়ে
এলিবিলিটিডেটাবেসের মধ্যে কর্মের প্রক্রিয়াSQL কুয়েরির মধ্যে এবং অন্যান্য ফাংশনের মধ্যে রিটার্ন করতে ব্যবহার করা হয়
প্রয়োগসাধারণত ডেটাবেস সাইড লজিক ব্যবহারের জন্যছোট কাজ বা কমপ্লেক্স কুয়েরির জন্য ব্যবহৃত

4. Stored Procedure এবং Function এর ব্যবহার

a. Stored Procedure এবং Function এর একসাথে ব্যবহার

ধরা যাক, আপনি একটি Function ব্যবহার করছেন যা ডেটাবেস থেকে একটি মান রিটার্ন করে এবং তারপর সেই মান ব্যবহার করে Stored Procedure দ্বারা অন্যান্য অপারেশন সম্পাদন করতে চান।

CREATE FUNCTION get_student_grade(student_id INT)
RETURNS CHAR
LANGUAGE plpgsql
AS DECLAREstudentgradeCHAR;BEGINSELECTgradeINTOstudentgradeFROMstudentsWHEREstudentid=studentid;RETURNstudentgrade;END;
DECLARE
    student_grade CHAR;
BEGIN
    SELECT grade INTO student_grade
    FROM students
    WHERE student_id = student_id;
    RETURN student_grade;
END;
;

CREATE PROCEDURE update_student_grade(IN student_id INT)
LANGUAGE plpgsql
AS BEGINDECLAREgradeCHAR;BEGIN--Getthestudent'sgradeusingthefunctiongrade:=getstudentgrade(studentid);--UpdatethegradeinthedatabaseUPDATEstudentsSETgrade=gradeWHEREstudentid=studentid;END;END;
BEGIN
    DECLARE
        grade CHAR;
    BEGIN
        -- Get the student's grade using the function
        grade := get_student_grade(student_id);
        -- Update the grade in the database
        UPDATE students
        SET grade = grade
        WHERE student_id = student_id;
    END;
END;
;

এখানে get_student_grade ফাংশনটি ছাত্রের গ্রেড সংগ্রহ করছে এবং সেই গ্রেডটি update_student_grade Stored Procedure তে ব্যবহার করা হচ্ছে।


সারাংশ

  • Stored Procedures ডেটাবেসে একাধিক SQL অপারেশন একত্রিত করে এবং CALL কমান্ডের মাধ্যমে এক্সিকিউট করা হয়। এটি কোন রিটার্ন ভ্যালু প্রদান করে না, তবে আউটপুট প্যারামিটার ব্যবহার করা যায়।
  • Functions হল SQL এর ছোট ব্লক যা নির্দিষ্ট কাজ সম্পাদন করে এবং একটি রিটার্ন ভ্যালু প্রদান করে, যা ডেটাবেসে অন্যান্য কুয়েরি বা SQL কন্ডিশনের মধ্যে ব্যবহৃত হতে পারে।
  • Stored Procedures এবং Functions PostgreSQL তে ডেটাবেসের লজিককে স্বয়ংক্রিয় এবং কার্যকরী করতে সহায়ক।
Content added By

Stored Procedures এবং Functions কী?

247

Stored Procedures এবং Functions হল PostgreSQL এবং অন্যান্য ডেটাবেসে ব্যবহৃত দুটি গুরুত্বপূর্ণ কনসেপ্ট যা ডেটাবেস লজিক এবং অপারেশনগুলোকে সহজ, পুনঃব্যবহারযোগ্য এবং সেন্ট্রালাইজড করতে সহায়তা করে। এগুলি ডেটাবেসে একটি নির্দিষ্ট কাজ সম্পাদন করার জন্য প্রোগ্রামেবল কোড ব্লক তৈরি করে, যেগুলি পরে একাধিকবার কল করা যেতে পারে।


1. Stored Procedures (স্টোরড প্রোসিজার)

Stored Procedures হল একটি ধরনের প্রোগ্রাম বা স্ক্রিপ্ট যা ডেটাবেস সার্ভারে সংরক্ষিত থাকে এবং ডেটাবেসে নির্দিষ্ট কাজ করার জন্য বারবার ব্যবহৃত হতে পারে। স্টোরড প্রোসিজারগুলিতে আপনি একাধিক SQL স্টেটমেন্ট থাকতে পারেন এবং আপনি প্রয়োজনে এক বা একাধিক আর্গুমেন্ট পাস করতে পারেন।

স্টোরড প্রোসিজারের সুবিধা:

  • কোড রিইউসেবিলিটি: একবার লিখে প্রোসিজারটি বারবার ব্যবহার করা যায়।
  • পারফরম্যান্স: স্টোরড প্রোসিজার ডেটাবেস সার্ভারে রান করার ফলে এক্সিকিউশন দ্রুত হয়।
  • কেন্দ্রীভূত লজিক: বিভিন্ন অ্যাপ্লিকেশন থেকে একই লজিক ব্যবহার করা সহজ।
  • ট্রানজেকশন হ্যান্ডলিং: স্টোরড প্রোসিজারের মধ্যে ট্রানজেকশন ব্যবস্থাপনা করা সম্ভব।

স্টোরড প্রোসিজার তৈরি করা:

CREATE PROCEDURE update_student_age(IN student_id INT, IN new_age INT)
LANGUAGE plpgsql
AS BEGINUPDATEstudentsSETage=newageWHEREid=studentid;END;
BEGIN
    UPDATE students
    SET age = new_age
    WHERE id = student_id;
END;
;

এই স্টোরড প্রোসিজারে student_id এবং new_age ইনপুট আর্গুমেন্ট হিসেবে নেয় এবং students টেবিলের ওই ছাত্রের বয়স আপডেট করে।

স্টোরড প্রোসিজার কল করা:

CALL update_student_age(1, 22);

এখানে, CALL কমান্ড ব্যবহার করে স্টোরড প্রোসিজারটি কল করা হয়েছে।


2. Functions (ফাংশন)

Functions হল SQL কমান্ড বা কোড ব্লক যা নির্দিষ্ট ইনপুট নিয়ে কিছু কার্যকরী কাজ করে এবং ফলস্বরূপ একটি ভ্যালু রিটার্ন করে। Functions সাধারণত ডেটাবেসের মধ্যে পুনঃব্যবহারযোগ্য লজিক বা ক্যালকুলেশন সম্পাদন করতে ব্যবহৃত হয়।

ফাংশনের সুবিধা:

  • ফলস্বরূপ প্রদান: ফাংশন কোনো ভ্যালু রিটার্ন করতে পারে (যেমন int, varchar, ইত্যাদি)।
  • ডেটাবেসে কাজ করার জন্য: SQL স্টেটমেন্টগুলির উপর লজিক প্রয়োগ করে রিটার্ন ভ্যালু প্রদান করতে পারে।
  • ক্যালকুলেশন: ফাংশন ক্যালকুলেশন এবং ডেটা ট্রান্সফরমেশন করতে ব্যবহার হয়।

ফাংশন তৈরি করা:

CREATE FUNCTION get_student_age(student_id INT)
RETURNS INT
LANGUAGE plpgsql
AS DECLAREresultageINT;BEGINSELECTageINTOresultageFROMstudentsWHEREid=studentid;RETURNresultage;END;
DECLARE
    result_age INT;
BEGIN
    SELECT age INTO result_age
    FROM students
    WHERE id = student_id;
    RETURN result_age;
END;
;

এটি একটি ফাংশন যা student_id ইনপুট হিসেবে নেয় এবং সেই ছাত্রের বয়স (age) রিটার্ন করে।

ফাংশন কল করা:

SELECT get_student_age(1);

এখানে, SELECT ব্যবহার করে ফাংশনটি কল করা হয়েছে এবং ফাংশনটির রিটার্ন ভ্যালু পাওয়া যাচ্ছে।


Stored Procedures এবং Functions এর মধ্যে পার্থক্য

বৈশিষ্ট্যStored ProcedureFunction
ফলস্বরূপকোন ফলস্বরূপ রিটার্ন নাও করতে পারে।একটি নির্দিষ্ট ভ্যালু রিটার্ন করে।
ব্যবহারসাধারণত সার্ভার সাইড লজিক চালানোর জন্য ব্যবহার করা হয়।সাধারণত ক্যালকুলেশন বা ডেটা রিটার্ন করার জন্য ব্যবহৃত হয়।
ট্রানজেকশন ম্যানেজমেন্টটানজেকশন ম্যানেজমেন্ট করতে পারে (কমিট বা রোলব্যাক)।ট্রানজেকশন ম্যানেজমেন্ট করতে পারে না।
কোলCALL কমান্ড দিয়ে কল করা হয়।SELECT বা অন্য SQL কমান্ডে কল করা হয়।
প্যারামিটারইনপুট প্যারামিটার নিয়ে কাজ করতে পারে।ইনপুট প্যারামিটার নিয়ে কাজ করতে পারে।

3. ফাংশন এবং স্টোরড প্রোসিজারের ব্যবহার

  • Stored Procedures:
    • যখন আপনি একাধিক SQL স্টেটমেন্ট একত্রে চালাতে চান।
    • যখন একটি নির্দিষ্ট লজিক বা কাজ বারবার ব্যবহার করতে চান, যেমন ডেটা আপডেট বা ডিলিট করা।
    • ট্রানজেকশন পরিচালনা করতে চান (কমিট বা রোলব্যাক সহ)।
  • Functions:
    • যখন আপনি কোনো ক্যালকুলেশন বা ডেটা পরিবর্তন ছাড়া ফলস্বরূপ মান (Value) চান।
    • ডেটাবেসের মধ্যে নির্দিষ্ট ডেটার উপর গণনা বা প্রক্রিয়া করতে চাইলে।

সারাংশ

  • Stored Procedures হল ডেটাবেস সার্ভারে সংরক্ষিত কোড যা একাধিক SQL স্টেটমেন্ট একত্রে কার্যকর করতে ব্যবহৃত হয় এবং এর ফলে আপনাকে পুনরায় একই কোড লিখতে হয় না।
  • Functions হল SQL কোড ব্লক যা একটি নির্দিষ্ট মান রিটার্ন করে এবং সাধারণত ক্যালকুলেশন বা প্রক্রিয়াকরণে ব্যবহৃত হয়।

এটি PostgreSQL ডেটাবেসে প্রোগ্রামেবল লজিক এবং কার্যকারিতা যোগ করতে সাহায্য করে, এবং আপনি এটি একাধিক ডেটাবেস অ্যাপ্লিকেশন ও সিস্টেমে ব্যবহার করতে পারেন।

Content added By

PL/pgSQL দিয়ে Stored Procedures তৈরি

341

PL/pgSQL (Procedural Language/PostgreSQL SQL) হল PostgreSQL ডেটাবেসে প্রোগ্রামিং ভাষা, যা SQL স্টেটমেন্টগুলির সাথে procedural লজিক একত্রিত করে। এটি PostgreSQL তে Stored Procedures এবং Functions তৈরি করার জন্য ব্যবহৃত হয়। Stored Procedures ডেটাবেসে কিছু নির্দিষ্ট কাজ বা লজিক সম্পাদন করতে ব্যবহৃত হয়, যা একবার তৈরি করার পর একাধিকবার চালানো যেতে পারে।

PL/pgSQL ব্যবহার করে Stored Procedures তৈরি করতে CREATE FUNCTION বা CREATE PROCEDURE কমান্ড ব্যবহার করা হয়। এখানে আমরা Stored Procedure তৈরি করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করব।


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

  • Function: একটি function নির্দিষ্ট একটি কাজ সম্পাদন করে এবং একটি মান ফেরত দেয় (Return value)।
  • Procedure: একটি procedure কোনো মান ফেরত দেয় না, তবে এটি একটি বা একাধিক কাজ সম্পাদন করতে ব্যবহৃত হয়।

2. Stored Procedure তৈরি করা

PostgreSQL 11 এ CREATE PROCEDURE কমান্ডে stored procedure তৈরি করা সম্ভব হয়েছে। এর মাধ্যমে আপনি একটি sequence বা process সম্পাদন করতে পারেন এবং এটি ডেটাবেসের মধ্যে একাধিক কাজ বা কার্যকলাপ সম্পাদন করতে সাহায্য করে। একটি Stored Procedure সাধারণত কিছু নির্দিষ্ট কাজ (যেমন ইনসার্ট, আপডেট, ডিলিট, কুয়েরি) করার জন্য ব্যবহৃত হয়।

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

CREATE PROCEDURE procedure_name (parameter1 type, parameter2 type)
LANGUAGE plpgsql
AS BEGIN--Procedurelogichere--Example:INSERT,UPDATE,SELECT,DELETE,etc.END;
BEGIN
    -- Procedure logic here
    -- Example: INSERT, UPDATE, SELECT, DELETE, etc.
END;
;

3. Stored Procedure এর উদাহরণ

ধরা যাক, আমাদের একটি টেবিল রয়েছে যার নাম employees, এবং আমরা একটি Stored Procedure তৈরি করতে চাই যা টেবিলের নতুন রেকর্ড যোগ করবে।

উদাহরণ ১: নতুন employee যোগ করার জন্য Stored Procedure

CREATE PROCEDURE add_employee(emp_name VARCHAR, emp_age INT)
LANGUAGE plpgsql
AS BEGININSERTINTOemployees(name,age)VALUES(empname,empage);END;
BEGIN
    INSERT INTO employees (name, age)
    VALUES (emp_name, emp_age);
END;
;

এটি add_employee নামের একটি Stored Procedure তৈরি করবে, যা দুইটি প্যারামিটার নিবে (emp_name এবং emp_age) এবং সেগুলি employees টেবিলে ইনসার্ট করবে।

Stored Procedure কল করার পদ্ধতি:

CALL add_employee('John Doe', 30);

এটি employees টেবিলে John Doe নামক একজন নতুন employee এবং তার বয়স ৩০ ইনসার্ট করবে।


4. Stored Procedure তে নিয়ন্ত্রণ কাঠামো ব্যবহার (Control Structures)

PL/pgSQL তে কিছু সাধারণ নিয়ন্ত্রণ কাঠামো যেমন IF, LOOP, FOR, WHILE, EXIT ইত্যাদি ব্যবহার করা যায়। এগুলি stored procedure বা function এর মধ্যে লজিক্যাল সিদ্ধান্ত নিতে সাহায্য করে।

উদাহরণ ২: IF/ELSE শর্ত ব্যবহার

ধরা যাক, একটি Stored Procedure তৈরি করতে চাই যা বয়সের ভিত্তিতে কর্মচারীকে eligible বা not eligible হিসাবে চিহ্নিত করবে।

CREATE PROCEDURE check_eligibility(emp_age INT)
LANGUAGE plpgsql
AS BEGINIFempage>=18THENRAISENOTICE'Eligible';ELSERAISENOTICE'NotEligible';ENDIF;END;
BEGIN
    IF emp_age >= 18 THEN
        RAISE NOTICE 'Eligible';
    ELSE
        RAISE NOTICE 'Not Eligible';
    END IF;
END;
;

এটি emp_age এর উপর ভিত্তি করে "Eligible" বা "Not Eligible" বার্তা দিবে।

Stored Procedure কল করার পদ্ধতি:

CALL check_eligibility(20);

এটি "Eligible" বার্তা দেখাবে, যেহেতু বয়স ১৮ বা তার বেশি।


5. Error Handling (ব্যতিক্রম হ্যান্ডলিং)

PostgreSQL তে PL/pgSQL এ EXCEPTION ব্লক ব্যবহার করে error handling করা যায়, যা কোন ভুল হলে আপনার প্রোগ্রামটি ঠিকমতো শেষ না হওয়া আটকাবে না।

উদাহরণ ৩: Error Handling সহ Stored Procedure

CREATE PROCEDURE divide_numbers(num1 INT, num2 INT)
LANGUAGE plpgsql
AS BEGINBEGIN--TryblockRAISENOTICE'Result:%',num1/num2;EXCEPTIONWHENdivisionbyzeroTHENRAISENOTICE'Error:Cannotdividebyzero';END;END;
BEGIN
    BEGIN
        -- Try block
        RAISE NOTICE 'Result: %', num1 / num2;
    EXCEPTION
        WHEN division_by_zero THEN
            RAISE NOTICE 'Error: Cannot divide by zero';
    END;
END;
;

এটি দুইটি সংখ্যার ভাগ করবে। যদি দ্বিতীয় সংখ্যাটি শূন্য হয়, তবে এটি একটি ত্রুটি বার্তা দেখাবে: "Error: Cannot divide by zero"।

Stored Procedure কল করার পদ্ধতি:

CALL divide_numbers(10, 0);

এটি "Error: Cannot divide by zero" বার্তা দেখাবে।


6. Stored Procedure তে Transaction Management

PostgreSQL তে আপনি Stored Procedure এর মধ্যে transaction management করতে পারেন, যেমন COMMIT, ROLLBACK

উদাহরণ ৪: Transaction Management সহ Stored Procedure

CREATE PROCEDURE transfer_money(sender_id INT, receiver_id INT, amount INT)
LANGUAGE plpgsql
AS BEGIN--BeginTransactionBEGIN--DeductmoneyfromsenderUPDATEaccountsSETbalance=balance-amountWHEREaccountid=senderid;--AddmoneytoreceiverUPDATEaccountsSETbalance=balance+amountWHEREaccountid=receiverid;--CommitthetransactionCOMMIT;EXCEPTIONWHENOTHERSTHEN--RollbackincaseoferrorROLLBACK;RAISENOTICE'Transactionfailed';END;END;
BEGIN
    -- Begin Transaction
    BEGIN
        -- Deduct money from sender
        UPDATE accounts SET balance = balance - amount WHERE account_id = sender_id;
        
        -- Add money to receiver
        UPDATE accounts SET balance = balance + amount WHERE account_id = receiver_id;

        -- Commit the transaction
        COMMIT;
    EXCEPTION
        WHEN OTHERS THEN
            -- Rollback in case of error
            ROLLBACK;
            RAISE NOTICE 'Transaction failed';
    END;
END;
;

এটি transfer_money নামের একটি Stored Procedure তৈরি করবে যা দুটি অ্যাকাউন্টের মধ্যে টাকা স্থানান্তর করবে। যদি কোনো ভুল হয়, তাহলে ROLLBACK করা হবে, অন্যথায় COMMIT হবে।


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

  • Reusability: Stored Procedures একবার তৈরি করা হলে বারবার ব্যবহৃত হতে পারে।
  • Performance: Stored Procedure ব্যবহার করার ফলে কমপ্লেক্স কুয়েরি এক্সিকিউট করা দ্রুত হয়, কারণ এটি ডেটাবেস সার্ভারেই সংরক্ষিত থাকে।
  • Security: Stored Procedures ব্যবহার করে আপনি ডেটাবেসের কার্যকলাপ সীমিত করতে পারেন এবং ডেটাবেসের এক্সেস কন্ট্রোল করতে পারেন।
  • Error Handling: Stored Procedures এর মধ্যে ত্রুটি (Error) হ্যান্ডলিং সহজে করা যায়।

সারাংশ

PL/pgSQL দিয়ে Stored Procedures তৈরি করার মাধ্যমে আপনি ডেটাবেসে কিছু নির্দিষ্ট কাজ সম্পাদন করতে পারেন যা একাধিকবার ব্যবহার করা যায়। এটি কোড পুনঃব্যবহারযোগ্যতা, পারফরম্যান্স, এবং নিরাপত্তা নিশ্চিত করে। Stored Procedures তে নিয়ন্ত্রণ কাঠামো, ত্রুটি হ্যান্ডলিং, এবং ট্রানজেকশন ম্যানেজমেন্ট ব্যবহার করে আরো জটিল লজিক প্রোগ্রাম করা সম্ভব।

Content added By

User Defined Functions (UDF) তৈরি করা

281

PostgreSQL তে User Defined Functions (UDFs) হল এমন ফাংশন যা ব্যবহারকারীরা তৈরি করে, যাতে তারা নিজস্ব ব্যবসায়িক লজিক বা কাস্টম অপারেশন ডেটাবেসে সম্পাদন করতে পারে। PostgreSQL তে ইউডিএফ তৈরি করার জন্য SQL, PL/pgSQL, বা অন্যান্য প্রোগ্রামিং ভাষা ব্যবহার করা যায়। ইউডিএফ তৈরি করার মাধ্যমে আপনি বিভিন্ন ডেটাবেস অপারেশন অটোমেট করতে পারেন এবং ডেটাবেসের পারফরম্যান্স উন্নত করতে সহায়তা পেতে পারেন।

১. Basic SQL Function

PostgreSQL তে সবচেয়ে সহজ ইউডিএফ হল SQL কুয়েরি বা স্টেটমেন্ট এর মধ্যে থাকা ফাংশন। এই ধরনের ফাংশনগুলো খুব সহজ এবং ডেটাবেসের মধ্যে কিছু কার্যকরী কাজ সম্পাদন করতে সাহায্য করে।

Syntax:

CREATE FUNCTION function_name(parameter1 data_type, parameter2 data_type, ...)
RETURNS return_data_type AS
SQLqueryorcode;
    SQL_query_or_code;

LANGUAGE sql;

উদাহরণ:

একটি সহজ SQL ফাংশন যা দুটি ইনপুট সংখ্যা নিয়ে তাদের যোগফল রিটার্ন করবে।

CREATE FUNCTION add_numbers(a INT, b INT)
RETURNS INT AS
SELECTa+b;
    SELECT a + b;

LANGUAGE sql;

এখন, আপনি add_numbers ফাংশনটি ব্যবহার করে দুটি সংখ্যার যোগফল পেতে পারেন:

SELECT add_numbers(10, 20);

২. PL/pgSQL Function

PostgreSQL তে PL/pgSQL (PostgreSQL Procedural Language) ব্যবহার করে আরো জটিল এবং কাস্টম ফাংশন তৈরি করা সম্ভব। এই ভাষাটি সাধারণত প্রোগ্রামিং লজিক ব্যবহার করে অনেকগুলো ধাপ সম্পাদন করার জন্য উপযুক্ত।

Syntax:

CREATE FUNCTION function_name(parameter1 data_type, parameter2 data_type, ...)
RETURNS return_data_type AS
DECLAREvariablenamedatatype;BEGIN--FunctionlogicRETURNvalue;END;
DECLARE
    variable_name data_type;
BEGIN
    -- Function logic
    RETURN value;
END;

LANGUAGE plpgsql;

উদাহরণ:

একটি ফাংশন তৈরি করা যা একটি গ্রাহকের বয়স হিসাব করে এবং যদি তার বয়স ১৮ এর বেশি হয়, তবে তাকে "Adult" হিসেবে চিহ্নিত করবে, অন্যথায় "Minor" হিসেবে।

CREATE FUNCTION check_age(age INT)
RETURNS TEXT AS
BEGINIFage>=18THENRETURN'Adult';ELSERETURN'Minor';ENDIF;END;
BEGIN
    IF age >= 18 THEN
        RETURN 'Adult';
    ELSE
        RETURN 'Minor';
    END IF;
END;

LANGUAGE plpgsql;

এখন আপনি check_age ফাংশনটি ব্যবহার করে একটি বয়স চেক করতে পারেন:

SELECT check_age(20);  -- Output: 'Adult'
SELECT check_age(15);  -- Output: 'Minor'

৩. Function with Multiple Parameters

PostgreSQL তে ইউডিএফ বিভিন্ন প্যারামিটার নিতে পারে এবং সেই প্যারামিটারগুলোর উপর ভিত্তি করে বিভিন্ন কাজ করতে পারে।

উদাহরণ:

একটি ফাংশন যা দুটি ইনপুট নেবে (প্রথম নাম এবং শেষ নাম) এবং তাদের পুরো নামের সাথে একত্রিত করবে:

CREATE FUNCTION get_full_name(first_name TEXT, last_name TEXT)
RETURNS TEXT AS
BEGINRETURNfirstname||''||lastname;END;
BEGIN
    RETURN first_name || ' ' || last_name;
END;

LANGUAGE plpgsql;

এখন, আপনি get_full_name ফাংশনটি ব্যবহার করে পূর্ণ নাম পেতে পারেন:

SELECT get_full_name('John', 'Doe');  -- Output: 'John Doe'

৪. Function with Conditional Logic

PostgreSQL তে ফাংশনগুলোতে শর্তানুযায়ী লজিক বা কন্ডিশনাল স্টেটমেন্ট ব্যবহার করা যেতে পারে।

উদাহরণ:

একটি ফাংশন তৈরি করা যা দুটি সংখ্যার মধ্যে বড় সংখ্যাটি রিটার্ন করবে:

CREATE FUNCTION get_max(a INT, b INT)
RETURNS INT AS
BEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;END;
BEGIN
    IF a > b THEN
        RETURN a;
    ELSE
        RETURN b;
    END IF;
END;

LANGUAGE plpgsql;

এখন, আপনি get_max ফাংশনটি ব্যবহার করে দুটি সংখ্যার মধ্যে বড় সংখ্যা পেতে পারেন:

SELECT get_max(5, 10);  -- Output: 10
SELECT get_max(20, 15);  -- Output: 20

৫. Function with Error Handling

PostgreSQL তে PL/pgSQL ফাংশনগুলোতে EXCEPTION ব্লক ব্যবহার করে ত্রুটি (Error) হ্যান্ডেল করা যেতে পারে। এটি প্রোগ্রামিং লজিককে আরো শক্তিশালী করে তোলে এবং কোনও ত্রুটি ঘটলে কার্যকরীভাবে তা ম্যানেজ করতে সাহায্য করে।

উদাহরণ:

একটি ফাংশন যা দুটি সংখ্যা গ্রহণ করবে এবং তাদের ভাগফল দেবে। যদি ডিভাইডার ০ হয়, তবে একটি ত্রুটি প্রদর্শন করবে:

CREATE FUNCTION divide_numbers(a INT, b INT)
RETURNS FLOAT AS
BEGINIFb=0THENRAISEEXCEPTION'Cannotdividebyzero';ELSERETURNa/b;ENDIF;END;
BEGIN
    IF b = 0 THEN
        RAISE EXCEPTION 'Cannot divide by zero';
    ELSE
        RETURN a / b;
    END IF;
END;

LANGUAGE plpgsql;

এখন, আপনি divide_numbers ফাংশনটি ব্যবহার করতে পারেন:

SELECT divide_numbers(10, 2);  -- Output: 5.0
SELECT divide_numbers(10, 0);  -- Error: Cannot divide by zero

6. Function with a Return Type:

ফাংশনটি ব্যবহারকারীকে একটি নির্দিষ্ট টাইপ রিটার্ন করতে পারে, যেমন TEXT, INTEGER, BOOLEAN, DATE, ইত্যাদি। আপনি আপনার ফাংশনের রিটার্ন টাইপের ওপর ভিত্তি করে এটিকে কাস্টমাইজ করতে পারেন।

উদাহরণ:

একটি ফাংশন তৈরি করা যা একটি নামের প্রথম অক্ষর রিটার্ন করবে:

CREATE FUNCTION get_first_letter(name TEXT)
RETURNS CHAR AS
BEGINRETURNSUBSTRING(nameFROM1FOR1);END;
BEGIN
    RETURN SUBSTRING(name FROM 1 FOR 1);
END;

LANGUAGE plpgsql;

এখন আপনি get_first_letter ফাংশনটি ব্যবহার করে নামের প্রথম অক্ষর পেতে পারেন:

SELECT get_first_letter('John');  -- Output: 'J'

7. Drop a Function

আপনি যখন আর কোনো ফাংশন ব্যবহার করতে না চান, তখন সেটি DROP FUNCTION স্টেটমেন্টের মাধ্যমে মুছে ফেলতে পারেন।

Syntax:

DROP FUNCTION function_name(parameter1 data_type, parameter2 data_type, ...);

উদাহরণ:

DROP FUNCTION get_full_name(TEXT, TEXT);

সারাংশ

PostgreSQL তে User Defined Functions (UDF) ব্যবহার করে আপনি কাস্টম অপারেশন এবং ব্যবসায়িক লজিক ডেটাবেসে সহজেই তৈরি করতে পারেন। SQL, PL/pgSQL বা অন্যান্য প্রোগ্রামিং ভাষা ব্যবহার করে আপনি আপনার প্রয়োজনীয় ফাংশন তৈরি করে ডেটাবেসের কাজের উন্নতি করতে পারবেন। UDF ব্যবহার করে ডেটাবেসের কার্যকরীতা বৃদ্ধি এবং অটোমেশন নিশ্চিত করা যায়।

Content added By

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

273

PostgreSQL এবং অন্যান্য ডেটাবেস সিস্টেমে Functions এবং Procedures দুটি গুরুত্বপূর্ণ কনসেপ্ট যা ডেটাবেসের লজিকাল অপারেশন এবং অ্যাপ্লিকেশন লজিক তৈরি করতে ব্যবহৃত হয়। যদিও তাদের মধ্যে কিছু মিল রয়েছে, তবুও তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। এখানে আমরা তাদের মধ্যে পার্থক্যটি বিস্তারিতভাবে আলোচনা করব।


1. Definition (সংজ্ঞা)

  • Function: একটি function হল একটি প্রোগ্রাম বা স্ক্রিপ্ট যা কোনো ইনপুট নিয়ে নির্দিষ্ট লজিক বা গণনা সম্পাদন করে এবং একটি মান (value) রিটার্ন করে। ফাংশন সাধারণত কিছু ইনপুট প্যারামিটার গ্রহণ করে এবং একটি আউটপুট প্রদান করে।
  • Procedure: একটি procedure হল একটি প্রোগ্রাম বা স্ক্রিপ্ট যা সাধারণত কোনো ইনপুট গ্রহণ করে এবং একটি নির্দিষ্ট কাজ সম্পাদন করে, তবে এটি কোনো মান রিটার্ন করে না। প্রোসিডিউর কোনো আউটপুট মান রিটার্ন না করে শুধুমাত্র ডেটাবেসে এক বা একাধিক অপারেশন (যেমন, ডেটা আপডেট বা টেবিল ম্যানিপুলেশন) সম্পাদন করে।

2. Return Value (রিটার্ন ভ্যালু)

  • Function:

    • একটি ফাংশন অবশ্যই একটি value রিটার্ন করে।
    • এটি যেকোনো ধরনের ডেটা টাইপ রিটার্ন করতে পারে, যেমন, integer, text, boolean, custom types ইত্যাদি।

    উদাহরণ:

    CREATE FUNCTION add_numbers(a INT, b INT) 
    RETURNS INT AS BEGINRETURNa+b;END;
    BEGIN
        RETURN a + b;
    END;
     LANGUAGE plpgsql;
    
  • Procedure:

    • একটি প্রোসিডিউর কোন return value প্রদান করে না। এটি শুধুমাত্র কিছু কাজ বা অপারেশন সম্পাদন করে।

    উদাহরণ:

    CREATE PROCEDURE update_employee_salary(employee_id INT, new_salary DECIMAL)
    LANGUAGE plpgsql
    AS BEGINUPDATEemployeesSETsalary=newsalaryWHEREid=employeeid;END;
    BEGIN
        UPDATE employees SET salary = new_salary WHERE id = employee_id;
    END;
    ;
    

3. Usage Context (ব্যবহারের প্রসঙ্গ)

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

4. Calling Method (কলিং পদ্ধতি)

  • Function:

    • ফাংশনকে SELECT স্টেটমেন্ট বা অন্যান্য SQL কুয়েরি দ্বারা কল করা হয়। এটি সরাসরি SQL কুয়েরির অংশ হিসেবে ব্যবহার করা যেতে পারে।

    উদাহরণ:

    SELECT add_numbers(3, 4);
    
  • Procedure:

    • প্রোসিডিউরকে CALL স্টেটমেন্ট দ্বারা কল করা হয়, এবং এটি কোনও মান রিটার্ন করে না। এটি ডেটাবেসের নির্দিষ্ট কাজ সম্পাদন করার জন্য ব্যবহৃত হয়।

    উদাহরণ:

    CALL update_employee_salary(101, 50000);
    

5. Transaction Control (ট্রানজেকশন কন্ট্রোল)

  • Function:
    • ফাংশন ট্রানজেকশন দ্বারা প্রভাবিত হতে পারে, কিন্তু ফাংশনটি ভিতরে ট্রানজেকশন ব্যবস্থাপনা করতে পারে না। এক্সিকিউশন শেষে ফাংশনটি যেটি রিটার্ন করে সেটি ব্যবহার করা যায়।
  • Procedure:
    • প্রোসিডিউর সাধারণত ট্রানজেকশন কন্ট্রোল (যেমন COMMIT, ROLLBACK) সম্পাদন করতে সক্ষম হয়, কারণ এটি দীর্ঘস্থায়ী কাজের জন্য ব্যবহৃত হয় এবং একাধিক SQL স্টেটমেন্ট একত্রে সম্পাদন করতে পারে।

6. Parameters (প্যারামিটার)

  • Function:

    • ফাংশনে input parameters ব্যবহার করা হয়, তবে কিছু ফাংশন আউটপুট দিতে পারে, যেমন OUT parameters

    উদাহরণ:

    CREATE FUNCTION multiply(a INT, b INT) 
    RETURNS INT AS BEGINRETURNa*b;END;
    BEGIN
        RETURN a * b;
    END;
     LANGUAGE plpgsql;
    
  • Procedure:

    • প্রোসিডিউরে input, output, এবং inout প্যারামিটার ব্যবহার করা যায়।

    উদাহরণ:

    CREATE PROCEDURE process_order(order_id INT, OUT total DECIMAL)
    LANGUAGE plpgsql
    AS BEGINSELECTsum(price)INTOtotalFROMorderitemsWHEREorderid=orderid;END;
    BEGIN
        SELECT sum(price) INTO total FROM order_items WHERE order_id = order_id;
    END;
    ;
    

সারাংশ

বিষয়FunctionProcedure
Return Valueএকটি মান রিটার্ন করেকোনও মান রিটার্ন করে না
Usageসাধারণত SQL কুয়েরিতে ব্যবহার হয়মূলত ব্যাচ অপারেশন এবং ডেটাবেস ম্যানিপুলেশন
Calling MethodSELECT কুয়েরি দ্বারা কল করা হয়CALL স্টেটমেন্ট দ্বারা কল করা হয়
Transaction Controlফাংশন ট্রানজেকশন কন্ট্রোল করতে পারে নাপ্রোসিডিউর ট্রানজেকশন কন্ট্রোল করতে পারে
Parametersইনপুট প্যারামিটার, আউটপুট প্যারামিটার ব্যবহার হয়ইনপুট, আউটপুট, ইনআউট প্যারামিটার ব্যবহার হয়

সারাংশ

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

ফাংশন এবং প্রোসিডিউর উভয়ই PostgreSQL-এর মধ্যে গুরুত্বপূর্ণ উপাদান এবং ডেটাবেস লজিক তৈরি করতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...