Un paquete PL/SQL es una agrupación lógica de conceptos PL/SQL. Una de las ventajas de los paquetes es que permite la MODULARIDAD. Permitiendo agrupaciones lógicas. Permiten un diseño más sencillo, eficaz y un mejor rendimiento.
Otra ventaja es la de permitirnos la SOBRECARGA de modo que podemos crear procedimientos o funciones con el mismo nombre y con diferentes parametros en el mismo paquete
Un paquete está compuesto de dos partes:
Un paquete puede contener métodos privados y públicos
SINTAXIS Las variables pueden ser Locales o Globales.
Los paquetes se pueden declarar en dos partes. Por un lado la cabecera y por otro el cuerpo. Esto facilita su posterior manipulación.
Para crear la cabecera del paquete:
CREATE [o REPLACE ] PACKAGE nombre_del_paquete IS | AS declaración de variables públicas declaración de los miembros y funciones públicas END nombre_del_paquete;
para crear el cuerpo del paquete:
CREATE [ o REPLACE ] PACKAGE BODY nombre_del_paquete IS | AS declaración de las variables privadas cuerpo de los miembros y funciones END nombre_del_paquete;
Cabecera:
CREATE OR REPLACE PACKAGE mi_primer_paquete IS g_variable NUMBER :=10; PROCEDURE asignar_g_variable (v_variable IN NUMBER); END mi_primer_paquete; /
cuerpo:
CREATE OR REPLACE PACKAGE BODY mi_primer_paquete IS
-- primera funcion.
-- funcion privada porque no está en la cabecera
FUNCTION validar (v_a_validar IN NUMBER ) RETURN BOOLEAN
IS
v_maximo NUMBER :=100;
BEGIN
select max(COMMISSION_PCT)
into v_maximo
from employees;
IF v_maximo > v_a_validar THEN
RETURN(TRUE);
ELSE
RETURN(FALSE);
END IF;
END validar;
-- hasta aqui.
-- segunda funcion (bueno, en realidad es un procedimiento)
-- funcion pública porque si que está en la cabecera
PROCEDURE asignar_g_variable (v_variable IN NUMBER)
IS
v_valido BOOLEAN;
BEGIN
v_valido := validar(v_variable );
IF v_valido = TRUE THEN
g_variable := v_variable;
DBMS_OUTPUT.PUT_LINE('o.k. the number is correct');
ELSE
DBMS_OUTPUT.PUT_LINE('the number is incorrect');
RAISE_APPLICATION_ERROR(-20210, 'numero invalido');
END IF;
END asignar_g_variable;
END mi_primer_paquete;
/
Finalmente, se llama a los programas de un paquete de la forma habitual:
execute mi_primer_paquete.asignar_g_variable(25);
Como siempre:
DROP PACKAGE nombre_del_paquete;
o si sólo quieres borrar el cuerpo del paquete:
DROP PACKAGE BODY nombre_del_paquete;
La sobrecarga de métodos es la técnica mediante la cual se utiliza el mismo nombre para diferentes subprogramas dentro de un paquete. La diferencia entre los métodos es el número y orden de parámetros.