PL/SQL Packages (The Code Library) 📚¶
Mentor's Note: Imagine a library with 10,000 books scattered on the floor. You'd never find anything! A Package is the bookshelf. It groups related Procedures, Functions, and Variables into one neat container. 💡
🌟 The Scenario: The Office Toolkit 🛠️¶
Imagine a toolbox labeled "HR_TOOLKIT".
- Inside, you have a hammer (add_employee), a screwdriver (update_salary), and a measuring tape (get_avg_pay).
- You don't just carry loose tools; you carry the Whole Box.
💻 1. The Package Specification (The API) 📝¶
This is the "Header". It lists what is in the box but not how it works. This is visible to other developers.
CREATE OR REPLACE PACKAGE hr_pkg AS
-- Global Variable
g_min_wage CONSTANT NUMBER := 15000;
-- Procedure Declaration
PROCEDURE hire_emp(p_name VARCHAR2);
-- Function Declaration
FUNCTION check_salary(p_id NUMBER) RETURN BOOLEAN;
END hr_pkg;
/
💻 2. The Package Body (The Engine Room) ⚙️¶
This is where the actual code lives. It is hidden from other users.
CREATE OR REPLACE PACKAGE BODY hr_pkg AS
-- Implementation of hire_emp
PROCEDURE hire_emp(p_name VARCHAR2) IS
BEGIN
INSERT INTO employees (name) VALUES (p_name);
END hire_emp;
-- Implementation of check_salary
FUNCTION check_salary(p_id NUMBER) RETURN BOOLEAN IS
BEGIN
-- Complex logic here...
RETURN TRUE;
END check_salary;
END hr_pkg;
/
🛡️ 3. Why use Packages? (Architect's Note)¶
- Encapsulation: You can have "Private" procedures inside the Body that nobody else can call. This protects your internal logic. 🔒
- Performance (Pre-loading): When you call one function in a package, Oracle loads the Entire Package into memory. Next time you call a different function from the same package, it's already in RAM! ⚡
- Overloading: You can have two procedures with the same name, as long as they take different types of parameters (e.g.,
find_emp(id NUMBER)andfind_emp(name VARCHAR2)).
🗑️ 4. Dropping Packages¶
DROP PACKAGE hr_pkg; -- Deletes both Spec and Body
DROP PACKAGE BODY hr_pkg; -- Deletes only the implementation