Package en Oracle
Los paquetes (Package) son objetos de esquema que agrupan los tipos, variables y subprogramas PL/SQL relacionados lógicamente.
Un package tiene dos partes :
- Especificación del package
- Cuerpo o definición del package
Especificación de package
La especificación es la interfaz del paquete. Sólo se DECLARA los tipos, variables, constantes, excepciones, cursores y subprogramas que se pueden hacer referencia desde fuera del paquete. En otras palabras, contiene toda la información sobre el contenido del paquete, pero excluye el código de los subprogramas.
Todos los objetos colocados en la especificación se llaman objetos públicos. Cualquier subprograma no incluido en la especificación del paquete pero codificado en el cuerpo del paquete se denomina objeto privado.
El fragmento de código siguiente muestra una especificación de paquete que tiene un procedimiento único. Puede tener muchas variables globales definidas y múltiples procedimientos o funciones dentro de un paquete.
1 2 3 4 5 6 |
CREATE PACKAGE PKG_ALUMNO AS PROCEDURE P_CALCULAR_PROMEDIO(P_CODIGOALUMNO IN ALUMNO.CODIGOALUMNO%TYPE); END PKG_ALUMNO; / |
Cuerpo del Package
El cuerpo del paquete tiene los códigos para varios métodos declarados en la especificación del paquete y otras declaraciones privadas, que están ocultas del código fuera del paquete.
La sentencia CREATE PACKAGE BODY se utiliza para crear el cuerpo del paquete. El fragmento de código siguiente muestra la declaración del cuerpo del paquete para el paquete P_CALCULAR_PROMEDIO creado anteriormente. Asumí que ya tenemos la tabla NOTAS, ALUMNOS creadas en nuestra base de datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CREATE OR REPLACE PACKAGE BODY PKG_ALUMNO AS PROCEDURE P_CALCULAR_PROMEDIO(P_CODIGOALUMNO IN ALUMNO.CODIGOALUMNO%TYPE) IS NPROMEDIO NOTA.PROMEDIO%TYPE; BEGIN SELECT (NOTA1 + NOTA2 + NOTA3) / 3 INTO NPROMEDIO FROM NOTAS WHERE CODIGOALUMNO = P_CODIGOALUMNO; END P_CALCULAR_PROMEDIO; END PKG_ALUMNO; |
Uso de los elementos del package
Se accede a los elementos del package (variables, procedimientos o funciones) con la siguiente sintaxis:
1 |
Nombre_package.nombre_elemento; |
Tenga en cuenta que ya hemos creado el paquete anterior en nuestro esquema de base de datos, el siguiente programa utiliza el método p_calcular_promedio del paquete PKG_ALUMNO
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE NCODIGOALUMNO ALUMNO.CODIGOALUMNO%type := &NCODIGOALUMNO; BEGIN PKG_ALUMNO.P_CALCULAR_PROMEDIO(NCODIGOALUMNO); END; / |
En conclusión
En relación a su ejecución, cuando un procedimiento o función que está definido dentro de un paquete es llamado por primera vez, todo el paquete es ingresado a memoria. Por lo tanto, posteriores llamadas al mismo u otros sub-programas dentro de ese paquete realizarán un acceso a memoria en lugar de a disco. Esto no sucede con procedimientos y funciones estándares.