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 Procedure | Function |
|---|---|---|
| রিটার্ন ভ্যালু | রিটার্ন ভ্যালু নেই। | একটি মান রিটার্ন করে। |
| ব্যবহার | সাধারণত ডেটাবেস পরিবর্তন (INSERT, UPDATE, DELETE) বা কার্যক্রম সম্পাদনের জন্য ব্যবহৃত। | সাধারণত কোনো গণনা বা মান বের করার জন্য ব্যবহৃত। |
| SQL কুইরি তে ব্যবহার | SQL কুইরির মধ্যে ব্যবহার করা যায় না। | SQL কুইরির মধ্যে ব্যবহার করা যেতে পারে। |
| প্রথম উপাদান | সাধারণত কোনও অপারেশন বা কার্য সম্পাদন করে। | সাধারণত একটি মান রিটার্ন করে। |
| EXCEPTION HANDLING | Exception handling করা হয়। | Exception handling করা হয়। |
Stored Procedure এবং Function এর সুবিধা
Stored Procedure এর সুবিধা:
- কাস্টম কার্যাবলী: নির্দিষ্ট ডেটাবেস কার্যক্রম যেমন ইনসার্ট, আপডেট, ডিলিট করতে ব্যবহার করা যায়।
- Multiple Operations: একাধিক SQL স্টেটমেন্ট একসঙ্গে এক্সিকিউট করা যায়।
- Code Reusability: একাধিক জায়গায় ব্যবহার করা যায়, ফলে কোডের পুনরাবৃত্তি কমে যায়।
Function এর সুবিধা:
- মান হিসাব করা: ফাংশনগুলো সহজেই ক্যালকুলেশন বা নির্দিষ্ট মান রিটার্ন করতে ব্যবহৃত হয়।
- SQL Query তে ব্যবহার: ফাংশনকে SQL কুইরির মধ্যে কল করা যেতে পারে যেমন
SELECT calculate_bonus(salary) FROM employees;। - Modularization: ডেটাবেস লজিককে আরও কার্যকরভাবে বিভাজন করতে সাহায্য করে।
Stored Procedure এবং Function এর বাস্তব উদাহরণ
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% বাড়িয়ে দেবে।
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 কোডের পুনরাবৃত্তি এবং জটিলতা কমাতে সাহায্য করে।
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 Procedure | Function |
|---|---|---|
| Return Type | কোন মান ফেরত দেয় না | একটি মান ফেরত দেয় (যেমন NUMBER, VARCHAR2) |
| Usage | সাধারণত ডেটাবেস অপারেশন (যেমন INSERT, UPDATE, DELETE) করার জন্য ব্যবহৃত হয় | ডেটা রিটার্ন বা ক্যালকুলেশন করার জন্য ব্যবহৃত হয় |
| Call | CALL স্টেটমেন্ট ব্যবহার করা হয় | সাধারণ SQL কুইরি বা PL/SQL ব্লকে ব্যবহার করা হয় |
| Can be Used in SELECT | না, সরাসরি SELECT কুইরিতে ব্যবহার করা যায় না | হ্যাঁ, SELECT কুইরিতে ব্যবহৃত হতে পারে |
Procedure এবং Function এর ক্ষেত্রে কিছু ভাল অনুশীলন
- Procedures সাধারণত COMMIT বা ROLLBACK করতে না দেওয়া ভাল, কারণ ডেটাবেসের ট্রানজেকশন নিয়ন্ত্রণ করা Application Layer এর কাজ হওয়া উচিত।
- Functions সাধারণত শুধুমাত্র মান ফেরত দেয়, তারা ডেটাবেসে কোনো পরিবর্তন বা অপারেশন সম্পাদন করে না।
- যখন একাধিক ডেটাবেস অপারেশন করতে হয়, তখন 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 তে দক্ষতা বৃদ্ধি করে এবং পারফরম্যান্স উন্নত করে।
PL/SQL-এ Functions এবং Procedures উভয়ই খুব গুরুত্বপূর্ণ অবজেক্ট, যেগুলি কোড পুনঃব্যবহারযোগ্য এবং সংগঠিত করার জন্য ব্যবহৃত হয়। এই ফাংশন এবং প্রোসিডিউরগুলোতে Parameters ব্যবহার করার মাধ্যমে, ডেটা অ্যাক্সেস এবং প্রক্রিয়া করতে সহায়ক হয়। Parameters ব্যবস্থাপনা কার্যকরভাবে কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়ায়।
ফাংশন এবং প্রোসিডিউরের মধ্যে পার্থক্য
- Function:
- একটি ফাংশন একটি ভ্যালু রিটার্ন করে। এটি সাধারণত একটি একক ভ্যালু বা একটি ফলাফল প্রদান করার জন্য ব্যবহৃত হয়।
- ফাংশনকে সাধারণত SQL কোয়েরি বা অন্য কোন PL/SQL কোডের মধ্যে কল করা যায়।
- Procedure:
- একটি প্রোসিডিউর কোন ভ্যালু রিটার্ন করে না, তবে এটি কোনো নির্দিষ্ট কার্যপদ্ধতি সম্পাদন করে, যেমন ডেটাবেসে ইনসার্ট, আপডেট, অথবা ডিলিট।
- প্রোসিডিউর সাধারণত প্রক্রিয়াগুলি সম্পাদন করার জন্য ব্যবহৃত হয় এবং এটি কল করার সময় আর্গুমেন্ট পাস করতে হয়।
Parameters Types
PL/SQL-এ ফাংশন এবং প্রোসিডিউরে তিন ধরনের প্যারামিটার ব্যবহৃত হয়:
- IN (Input Parameter):
- IN প্যারামিটার হল ডিফল্ট প্যারামিটার, যা ফাংশন বা প্রোসিডিউরে ইনপুট হিসেবে প্রদান করা হয়। এটি শুধুমাত্র ফাংশন বা প্রোসিডিউরের ভিতরে পড়া যেতে পারে এবং তার মান পরিবর্তন করা যায় না।
- উদাহরণ: ডেটা গ্রহণ করা, যেমন: এক্সিকিউট করার জন্য কোন মান প্রদান করা।
- OUT (Output Parameter):
- OUT প্যারামিটার ব্যবহার করে ফাংশন বা প্রোসিডিউর থেকে ডেটা আউটপুট করা হয়। এটি ফাংশন বা প্রোসিডিউরের ভিতরে মান পরিবর্তন করতে দেয় এবং সেই পরিবর্তিত মান কলিং স্কোপে ফিরে আসে।
- উদাহরণ: কোন ফলাফল প্রদান করা, যেমন কোন ক্যালকুলেশন বা ভ্যালু সেট করা।
- 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)
- IN প্যারামিটার ব্যবহার করা যখন শুধুমাত্র ডেটা প্রেরণ করতে হয়:
যখন আপনি শুধুমাত্র ফাংশন বা প্রোসিডিউরে ডেটা পাঠাচ্ছেন এবং সেই ডেটা পরিবর্তন করা প্রয়োজন নয়, তখনINপ্যারামিটার ব্যবহার করা উচিত। - OUT প্যারামিটার ব্যবহার করা যখন ফলাফল ফেরত দিতে হয়:
প্রোসিডিউর বা ফাংশন থেকে যদি কোনো ফলাফল বা মান ফেরত দিতে হয়, তবেOUTপ্যারামিটার ব্যবহার করুন। - IN OUT প্যারামিটার ব্যবহার করা যখন ডেটা প্রেরণ এবং ফেরত দুইটাই করতে হয়:
যখন আপনি কোন মান প্রেরণ করতে চান এবং সেই মানকে পরিবর্তন করে ফেরত চান, তখনIN OUTপ্যারামিটার ব্যবহার করুন। - Proper Data Types ব্যবহার করা:
ফাংশন এবং প্রোসিডিউর তৈরি করার সময়, প্যারামিটার ডেটা টাইপের সাথে মিল রেখে সঠিক ডেটা টাইপ ব্যবহার করুন। এতে কোডের কার্যক্ষমতা এবং ডেটা সঠিকতা নিশ্চিত হয়। - Default Values ব্যবহার করা:
যখন কোনো প্যারামিটার অপরিহার্য না হয়, তখন আপনি ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে কল করার সময় সেই প্যারামিটার না দিয়েও ফাংশন বা প্রোসিডিউরটি কল করা যায়।
উপসংহার
PL/SQL-এ ফাংশন এবং প্রোসিডিউরগুলির সাথে প্যারামিটার ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ। সঠিকভাবে প্যারামিটার ব্যবহার করলে কোড আরও নমনীয়, পুনঃব্যবহারযোগ্য এবং পারফর্মেন্সে উন্নত হয়। IN, OUT, এবং IN OUT প্যারামিটার ব্যবহার করে, আপনি ফাংশন এবং প্রোসিডিউরগুলির কার্যকারিতা বৃদ্ধি করতে পারেন এবং আপনার কোডকে আরও শক্তিশালী করতে পারেন।
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 এর পার্থক্য
| বিষয় | Function | Procedure |
|---|---|---|
| ফিরিয়ে দেয় | একটি মান (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 উভয়ই কোড পুনঃব্যবহারযোগ্যতা, নির্ভরযোগ্যতা এবং সংগঠনের জন্য অপরিহার্য।
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 ব্লক ব্যবহার করা যায়।
EXECUTE কমান্ডের মাধ্যমে কল:
EXECUTE greet_user('John');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 কল করা:
SELECT স্টেটমেন্টে ফাংশন কল:
SELECT add_numbers(10, 20) FROM dual;এখানে,
add_numbers(10, 20)ফাংশন কল করলে ফলাফল হবে:30PL/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 এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Procedure | Function |
|---|---|---|
| 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
- Error Handling: ফাংশন বা প্রোসিডিউর কল করার সময় কোনো ত্রুটি ঘটলে তা যথাযথভাবে
EXCEPTION HANDLINGব্যবহার করে সমাধান করতে হবে। - Parameter Validation: ইনপুট প্যারামিটারগুলোর ভ্যালিডেশন করা উচিত যাতে ভুল ডেটা ফাংশন বা প্রোসিডিউরে প্রবাহিত না হয়।
- Performance Optimization: যদি অনেক ডেটা প্রসেস করতে হয়, তবে BULK COLLECT বা FORALL ব্যবহার করে কোডের পারফরম্যান্স উন্নত করা উচিত।
- Reusable Code: Procedure এবং Function গুলি পুনরায় ব্যবহারের উপযোগী হতে হবে, যাতে একাধিক জায়গায় এগুলি কল করা যায়।
এইভাবে PL/SQL-এ Procedure এবং Function কল করা হয় এবং এগুলির মধ্যে পার্থক্য ও বাস্তব উদাহরণগুলি দেওয়া হয়েছে।
Read more