PL/SQL-এ Package হল একটি গ্রুপিং বা মোডিউল যা একাধিক Procedure, Function, এবং Variables একত্রিত করে। এটি কোডের পুনঃব্যবহারযোগ্যতা, পরিচালনযোগ্যতা এবং সিকিউরিটি উন্নত করার জন্য ব্যবহৃত হয়। প্যাকেজ দুটি প্রধান অংশে বিভক্ত: Specification এবং Body।
1. Package Specification
Package Specification হল প্যাকেজের একটি পাবলিক অংশ, যেখানে প্যাকেজের সমস্ত পাবলিক উপাদান (যেমন Functions, Procedures, Constants, Variables, Types) ঘোষণা করা হয়। এটি হল সেই অংশ, যা অন্য PL/SQL ব্লক এবং অ্যাপ্লিকেশন কোড দ্বারা অ্যাক্সেসযোগ্য থাকে।
Package Specification-এ আপনি কেবলমাত্র ঘোষণা করতে পারবেন, বাস্তবায়ন বা লজিক এখানে থাকবে না।
Syntax:
CREATE OR REPLACE PACKAGE package_name AS
-- Declarations of types, variables, constants, procedures, and functions
FUNCTION function_name (param1 datatype) RETURN return_type;
PROCEDURE procedure_name(param1 datatype);
-- Other declarations
END package_name;
উদাহরণ:
CREATE OR REPLACE PACKAGE employee_package AS
-- Variable Declaration
v_company_name VARCHAR2(100);
-- Function Declaration
FUNCTION get_employee_salary (emp_id NUMBER) RETURN NUMBER;
-- Procedure Declaration
PROCEDURE update_employee_salary (emp_id NUMBER, new_salary NUMBER);
-- Constant Declaration
c_minimum_salary CONSTANT NUMBER := 2000;
END employee_package;
এখানে, employee_package প্যাকেজের মধ্যে একটি ভেরিয়েবল (v_company_name), একটি ফাংশন (get_employee_salary), একটি প্রোসিডিউর (update_employee_salary), এবং একটি কনস্ট্যান্ট (c_minimum_salary) ডিক্লেয়ার করা হয়েছে।
2. Package Body
Package Body হল প্যাকেজের গোপন অংশ যেখানে প্যাকেজের ফাংশন, প্রোসিডিউর, এবং অন্যান্য ঘোষিত উপাদানগুলোর বাস্তবায়ন (implementation) করা হয়। Package Body ছাড়া Specification তৈরি করা সম্ভব, কিন্তু তা কার্যকরী হবে না যতক্ষণ না তার বাস্তবায়ন করা না হয়।
Package Body-এ Specification-এ ঘোষণা করা সব ফাংশন, প্রোসিডিউর ইত্যাদির বাস্তবায়ন থাকতে হবে।
Syntax:
CREATE OR REPLACE PACKAGE BODY package_name AS
-- Actual implementation of declared functions, procedures, etc.
FUNCTION function_name (param1 datatype) RETURN return_type IS
BEGIN
-- Function logic
END function_name;
PROCEDURE procedure_name(param1 datatype) IS
BEGIN
-- Procedure logic
END procedure_name;
-- Other implementations
END package_name;
উদাহরণ:
CREATE OR REPLACE PACKAGE BODY employee_package AS
-- Function Implementation
FUNCTION get_employee_salary (emp_id NUMBER) RETURN NUMBER IS
v_salary NUMBER(8, 2);
BEGIN
SELECT salary INTO v_salary
FROM employees
WHERE employee_id = emp_id;
RETURN v_salary;
END get_employee_salary;
-- Procedure Implementation
PROCEDURE update_employee_salary (emp_id NUMBER, new_salary NUMBER) IS
BEGIN
UPDATE employees
SET salary = new_salary
WHERE employee_id = emp_id;
COMMIT;
END update_employee_salary;
END employee_package;
এখানে, get_employee_salary ফাংশনটি একটি কর্মচারীর বেতন রিট্রিভ করার জন্য এবং update_employee_salary প্রোসিডিউরটি কর্মচারীর বেতন আপডেট করার জন্য বাস্তবায়ন করা হয়েছে।
Package Specification এবং Body এর পার্থক্য
- Specification:
- এটি প্যাকেজের পাবলিক অংশ, যেখানে আপনি ডিক্লেয়ারেশন করেন, কিন্তু বাস্তবায়ন করেন না।
- Specification অংশ থেকে অ্যাপ্লিকেশন বা অন্য PL/SQL কোড প্যাকেজের উপাদানগুলো (যেমন ফাংশন বা প্রোসিডিউর) অ্যাক্সেস করতে পারে।
- Body:
- এটি প্যাকেজের প্রাইভেট অংশ, যেখানে আপনি Specification-এ ডিক্লেয়ার করা উপাদানগুলোর বাস্তবায়ন করেন।
- Body অংশের মধ্যে বাস্তবায়ন থাকে, এবং এখানে আপনি ফাংশন বা প্রোসিডিউরের লজিক লিখেন।
Package-এর ব্যবহার এবং সুবিধা
- Modularity: প্যাকেজের মাধ্যমে কোডকে মডুলার করা যায়, যেখানে একাধিক ফাংশন ও প্রোসিডিউর একসাথে কাজ করে।
- Encapsulation: প্যাকেজে কোডের বাস্তবায়ন এবং ডিক্লেয়ারেশন আলাদা করা যায়, যা কোডের রক্ষণাবেক্ষণ সহজ করে।
- Code Reusability: একবার প্যাকেজ তৈরি করলে সেটি একাধিক PL/SQL ব্লকে ব্যবহার করা যেতে পারে।
- Security: প্যাকেজের মাধ্যমে সিকিউরিটি নিশ্চিত করা যায়, কারণ আপনি পাবলিক এবং প্রাইভেট অংশ পৃথক করতে পারেন।
- Performance: প্যাকেজের উপাদানগুলো একবার লোড হলে পরবর্তীতে দ্রুত এক্সিকিউট হয়, কারণ পুরো প্যাকেজটি মেমরিতে থাকে।
Package এর এক্সিকিউশন উদাহরণ:
এখন, চলুন দেখি কীভাবে আমরা employee_package প্যাকেজটি ব্যবহার করতে পারি।
ফাংশন কল করা:
DECLARE
v_salary NUMBER;
BEGIN
v_salary := employee_package.get_employee_salary(101); -- Employee ID 101
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;
প্রোসিডিউর কল করা:
BEGIN
employee_package.update_employee_salary(101, 5500); -- Update salary for employee 101
DBMS_OUTPUT.PUT_LINE('Employee salary updated successfully.');
END;
Conclusion:
PL/SQL-এ Package তৈরি করতে হলে আপনাকে দুইটি অংশে বিভক্ত করতে হবে: Specification এবং Body। Specification অংশে আপনি পাবলিক ডিক্লেয়ারেশন করেন এবং Body অংশে তাদের বাস্তবায়ন করেন। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং সিকিউরিটি উন্নত করতে সাহায্য করে, এবং বিভিন্ন ফাংশন, প্রোসিডিউর একত্রে একটি সিস্টেমে কাজ করতে সক্ষম হয়।
Read more