PL/SQL (Procedural Language for SQL) প্রোগ্রামিং ভাষায় ফাংশন (Function) এবং প্রোসিডিউর (Procedure) দুইটি গুরুত্বপূর্ণ কনসেপ্ট। এই দুটি ব্যবহার করে আপনি SQL এবং PL/SQL-এর কার্যক্রমকে আরও মডুলার ও পুনঃব্যবহারযোগ্য করতে পারেন। এই দুটি প্রোগ্রাম ইউনিটের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, তবে তাদের কাজের ধরন ও গঠন অনেকটা একই।
এখানে আমরা দেখব কিভাবে ফাংশন এবং প্রোসিডিউর তৈরি এবং ব্যবহার করা যায়।
১. PL/SQL Function
PL/SQL ফাংশন হল এমন একটি প্রোগ্রাম ইউনিট যা একটি নির্দিষ্ট কাজ সম্পাদন করে এবং একটি মান (value) রিটার্ন করে। ফাংশন সাধারণত ব্যবহার করা হয় যখন একটি নির্দিষ্ট কাজ করার পর কোনো মান বা ফলাফল প্রাপ্তি জরুরি থাকে।
ফাংশন তৈরি করার সাধারণ গঠন:
CREATE [OR REPLACE] FUNCTION function_name
(parameter1 datatype, parameter2 datatype, ...)
RETURN return_datatype
IS
BEGIN
-- Function body
RETURN result;
END function_name;
- parameter1, parameter2, ...: ইনপুট প্যারামিটারগুলি (যা ব্যবহারকারীর কাছ থেকে মান গ্রহণ করবে)।
- return_datatype: ফাংশন যে ডেটা টাইপের মান রিটার্ন করবে (যেমন
NUMBER,VARCHAR2,DATE, ইত্যাদি)। - result: রিটার্ন করা মান।
ফাংশন উদাহরণ:
ধরা যাক, একটি ফাংশন তৈরি করতে হবে যা দুটি সংখ্যার যোগফল রিটার্ন করবে:
CREATE OR REPLACE FUNCTION add_numbers (p_num1 NUMBER, p_num2 NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN p_num1 + p_num2;
END add_numbers;
এখানে add_numbers ফাংশন দুটি ইনপুট প্যারামিটার নেয় এবং তাদের যোগফল রিটার্ন করে।
ফাংশন ব্যবহার:
ফাংশন ব্যবহার করার জন্য, আপনি এটি একটি SELECT কুইরি বা PL/SQL ব্লক-এ কল করতে পারেন।
ফাংশন কল করা (PL/SQL ব্লক):
DECLARE
v_result NUMBER;
BEGIN
v_result := add_numbers(10, 20); -- Function call
DBMS_OUTPUT.PUT_LINE('Sum: ' || v_result); -- Display the result
END;
ফাংশন কল করা (SQL কুইরি):
SELECT add_numbers(10, 20) FROM dual;
২. PL/SQL Procedure
PL/SQL প্রোসিডিউর হল একটি প্রোগ্রাম ইউনিট যা একাধিক কাজ সম্পাদন করে কিন্তু এটি কোনো মান রিটার্ন করে না। প্রোসিডিউর সাধারণত ব্যবহৃত হয় যখন একটি নির্দিষ্ট কাজ একাধিক ধাপে সম্পন্ন করতে হয়, কিন্তু কোন ফলাফল বা রিটার্ন মান দরকার নেই।
প্রোসিডিউর তৈরি করার সাধারণ গঠন:
CREATE [OR REPLACE] PROCEDURE procedure_name
(parameter1 datatype, parameter2 datatype, ...)
IS
BEGIN
-- Procedure body
END procedure_name;
- parameter1, parameter2, ...: ইনপুট (IN), আউটপুট (OUT), বা ইন/আউট (IN OUT) প্যারামিটার।
- প্রোসিডিউর রিটার্ন মান দেয় না, তবে তা প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয়।
প্রোসিডিউর উদাহরণ:
ধরা যাক, একটি প্রোসিডিউর তৈরি করতে হবে যা দুটি সংখ্যা যোগ করে এবং তাদের যোগফল একটি আউটপুট প্যারামিটার হিসেবে ফেরত দেয়।
CREATE OR REPLACE PROCEDURE add_numbers_proc
(p_num1 IN NUMBER, p_num2 IN NUMBER, p_sum OUT NUMBER)
IS
BEGIN
p_sum := p_num1 + p_num2; -- Perform the addition
END add_numbers_proc;
এখানে add_numbers_proc প্রোসিডিউরটি দুটি ইনপুট প্যারামিটার নেয় এবং একটি আউটপুট প্যারামিটার p_sum এ তাদের যোগফল প্রদান করে।
প্রোসিডিউর ব্যবহার:
প্রোসিডিউর ব্যবহার করতে, আপনি EXECUTE স্টেটমেন্ট ব্যবহার করবেন অথবা একটি PL/SQL ব্লক থেকে কল করবেন।
প্রোসিডিউর কল করা (PL/SQL ব্লক):
DECLARE
v_result NUMBER; -- Variable to hold the sum
BEGIN
add_numbers_proc(10, 20, v_result); -- Procedure call
DBMS_OUTPUT.PUT_LINE('Sum: ' || v_result); -- Display the result
END;
প্রোসিডিউর কল করা (SQL কুইরি):
EXEC add_numbers_proc(10, 20, :result);
৩. Function এবং Procedure-এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Function | Procedure |
|---|---|---|
| রিটার্ন ভ্যালু | একটি একক মান রিটার্ন করে | কোন মান রিটার্ন করে না |
| ব্যবহার | সাধারণত ব্যবহৃত হয় যখন একটি মান প্রয়োজন | সাধারণত ব্যবহৃত হয় যখন অনেক কাজ একত্রে করতে হয় |
| ডেটাবেস কিউরির সাথে ব্যবহার | SELECT কুইরির মাধ্যমে কল করা যেতে পারে | EXECUTE বা CALL দ্বারা কল করা হয় |
| সামান্য কাজ | একক কাজ বা গণনা করা হয় | একাধিক কাজ সম্পাদন করা হয় |
৪. Parameter Modes: IN, OUT, IN OUT
- IN: ইনপুট প্যারামিটার, যা ফাংশন বা প্রোসিডিউরে পাঠানোর সময় সেট করা হয়।
- OUT: আউটপুট প্যারামিটার, যা প্রোসিডিউর বা ফাংশনটি প্রক্রিয়া করার পর ফলাফল ফেরত দেয়।
- IN OUT: ইনপুট এবং আউটপুট প্যারামিটার, যা পাঠানোর সময় একটি মান গ্রহণ করে এবং প্রোসিডিউর বা ফাংশন শেষে মান পরিবর্তন করে ফেরত দেয়।
Parameter Mode উদাহরণ:
CREATE OR REPLACE PROCEDURE update_salary
(p_emp_id IN NUMBER, p_new_salary IN OUT NUMBER)
IS
BEGIN
p_new_salary := p_new_salary * 1.1; -- Increase salary by 10%
END update_salary;
এখানে p_new_salary প্যারামিটারটি IN OUT হিসেবে ব্যবহার করা হয়েছে, যার মান প্রোসিডিউরটি রান করার পর পরিবর্তিত হবে।
৫. Recursive Functions
ফাংশন বা প্রোসিডিউরগুলি recursive হতে পারে, অর্থাৎ একটি ফাংশন বা প্রোসিডিউর নিজেই কল করতে পারে। তবে, আপনি যখন রিকর্শন ব্যবহার করবেন, তখন এটি অবশ্যই একেবারে সঠিকভাবে সীমাবদ্ধ হতে হবে, নতুবা ইনফিনিট লুপ হতে পারে।
রিকর্শন ফাংশনের উদাহরণ:
CREATE OR REPLACE FUNCTION factorial (n NUMBER)
RETURN NUMBER
IS
BEGIN
IF n = 0 THEN
RETURN 1;
ELSE
RETURN n * factorial(n - 1); -- Recursive call
END IF;
END factorial;
এখানে factorial ফাংশনটি একটি সংখ্যা n এর ফ্যাক্টোরিয়াল হিসাব করে।
উপসংহার:
PL/SQL-এ ফাংশন এবং প্রোসিডিউর তৈরি ও ব্যবহার করার মাধ্যমে আপনি আপনার ডেটাবেস অ্যাপ্লিকেশনে মডুলারিটি এবং পুনঃব্যবহারযোগ্যতা আনতে পারবেন। যেখানে ফাংশন একটি মান রিটার্ন করে এবং প্রোসিডিউর একাধিক কাজ সম্পন্ন করে। এগুলির মাধ্যমে আপনি আপনার কোডের কার্যকারিতা বাড়াতে এবং ডেটাবেস অপারেশনগুলোকে আরও কার্যকরী ও নির্ভরযোগ্য করতে পারবেন।
Read more