Está en la página 1de 20

Creacin de Paquetes

Copyright 2004, Oracle. Todos los Derechos Reservados.

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo siguiente: Describir paquetes y enumerar sus componentes Crear un paquete para agrupar las variables, cursores, constantes, excepciones, procedimientos y funciones relacionadas Designar una construccin de paquetes como pblica o privada Llamar a una construccin de paquetes Describir el uso de un paquete sin cuerpo

Copyright 2004, Oracle. Todos los Derechos Reservados.

Paquetes PL/SQL: Visin General


Paquetes PL/SQL: Agrupan componentes relacionados de forma lgica:
Tipos PL/SQL Variables, estructuras de datos y excepciones Subprogramas: procedimientos y funciones

Constan de dos partes:


Una especificacin Un cuerpo

Activan el servidor de Oracle para que lea varios objetos en memoria a la vez

Copyright 2004, Oracle. Todos los Derechos Reservados.

Componentes de un Paquete PL/SQL


Especificacin del paquete

variable Pblico Declaracin del procedimiento A;

variable Definicin del procedimiento B Definicin del procedimiento A variable Cuerpo del paquete BEGIN END; Privado

Copyright 2004, Oracle. Todos los Derechos Reservados.

Visibilidad de Componentes de Paquete


Especificacin del paquete

public_var Procedimiento A; Cdigo externo

private_var Procedimiento B IS BEGIN END; Procedimiento A IS local_var Cuerpo del paquete BEGIN END;

Copyright 2004, Oracle. Todos los Derechos Reservados.

Desarrollo de Paquetes PL/SQL

spec.sql

1 Editar

2 Cargar 3 Crear (compilar y almacenar)

body.sql especificacin 4 Usar SHOW ERRORS para errores de compilacin Ejecutar

cuerpo

Copyright 2004, Oracle. Todos los Derechos Reservados.

Creacin de la Especificacin del Paquete


Sintaxis:
CREATE [OR REPLACE] PACKAGE package_name IS|AS public type and variable declarations subprogram specifications END [package_name];

La opcin OR REPLACE borra y vuelve a crear la especificacin del paquete. Las variables declaradas en la especificacin del paquete se inicializan con el valor NULL como valor por defecto. Todas las construcciones declaradas en una especificacin de paquete son visibles para los usuarios con privilegios en el paquete.
Copyright 2004, Oracle. Todos los Derechos Reservados.

Ejemplo de Especificacin de un Paquete: comm_pkg


CREATE OR REPLACE PACKAGE comm_pkg IS std_comm NUMBER := 0.10; --initialized to 0.10 PROCEDURE reset_comm(new_comm NUMBER); END comm_pkg; /

STD_COMM es una variable global inicializada en 0,10. RESET_COMM es un procedimiento pblico que se utiliza para restablecer la comisin estndar basada en algunas reglas de negocios. Se implementa en el cuerpo del paquete.

Copyright 2004, Oracle. Todos los Derechos Reservados.

Creacin del Cuerpo del Paquete


Sintaxis:
CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS private type and variable declarations subprogram bodies [BEGIN initialization statements] END [package_name];

La opcin OR REPLACE borra y vuelve a crear el cuerpo del paquete. Los identificadores definidos en el cuerpo del paquete son privados y no son visibles fuera del cuerpo del paquete. Todas las construcciones privadas se deben declarar antes de hacer referencia a ellas. Las construcciones pblicas son visibles en el cuerpo del paquete.
Copyright 2004, Oracle. Todos los Derechos Reservados.

Ejemplo del Cuerpo del Paquete: comm_pkg


CREATE OR REPLACE PACKAGE BODY comm_pkg IS FUNCTION validate(comm NUMBER) RETURN BOOLEAN IS max_comm employees.commission_pct%type; BEGIN SELECT MAX(commission_pct) INTO max_comm FROM employees; RETURN (comm BETWEEN 0.0 AND max_comm); END validate; PROCEDURE reset_comm (new_comm NUMBER) IS BEGIN IF validate(new_comm) THEN std_comm := new_comm; -- reset public var ELSE RAISE_APPLICATION_ERROR( -20210, 'Bad Commission'); END IF; END reset_comm; END comm_pkg;
Copyright 2004, Oracle. Todos los Derechos Reservados.

Llamada a Subprogramas de Paquete


Llamada a una funcin en el mismo paquete:
CREATE OR REPLACE PACKAGE BODY comm_pkg IS ... PROCEDURE reset_comm(new_comm NUMBER) IS BEGIN IF validate(new_comm) THEN std_comm := new_comm; ELSE ... END IF; END reset_comm; END comm_pkg;

Llamada a un procedimiento de paquete desde iSQL*Plus:


EXECUTE comm_pkg.reset_comm(0.15)

Llamada a un procedimiento de paquete en un esquema diferente:


EXECUTE scott.comm_pkg.reset_comm(0.15)
Copyright 2004, Oracle. Todos los Derechos Reservados.

Creacin y Uso de Paquetes sin Cuerpo


CREATE OR REPLACE PACKAGE global_consts IS mile_2_kilo CONSTANT NUMBER := 1.6093; kilo_2_mile CONSTANT NUMBER := 0.6214; yard_2_meter CONSTANT NUMBER := 0.9144; meter_2_yard CONSTANT NUMBER := 1.0936; END global_consts; BEGIN END; CREATE FUNCTION mtr2yrd(m NUMBER) RETURN NUMBER IS BEGIN RETURN (m * global_consts.meter_2_yard); END mtr2yrd; / EXECUTE DBMS_OUTPUT.PUT_LINE(mtr2yrd(1))
Copyright 2004, Oracle. Todos los Derechos Reservados.

DBMS_OUTPUT.PUT_LINE('20 miles = ' || 20 * global_consts.mile_2_kilo || ' km');

Eliminacin de Paquetes
Para eliminar la especificacin y el cuerpo del paquete, utilice la siguiente sintaxis:

DROP PACKAGE package_name;

Para eliminar el cuerpo del paquete, utilice la siguiente sintaxis:


DROP PACKAGE BODY package_name;

Copyright 2004, Oracle. Todos los Derechos Reservados.

Visualizacin de Paquetes en el Diccionario de Datos


El cdigo de origen para paquetes PL/SQL se mantiene y es visible a travs de las tablas USER_SOURCE y ALL_SOURCE en el diccionario de datos. Para ver la especificacin del paquete, utilice:
SELECT text FROM user_source WHERE name = 'COMM_PKG' AND type = 'PACKAGE';

Para ver el cuerpo del paquete, utilice:


SELECT text FROM user_source WHERE name = 'COMM_PKG' AND type = 'PACKAGE BODY';

Copyright 2004, Oracle. Todos los Derechos Reservados.

Instrucciones para la Escritura de Paquetes


Construir paquetes para uso general. Definir la especificacin del paquete antes del cuerpo. La especificacin del paquete debe contener solamente las construcciones que desee que sean pblicas. Colocar elementos en la parte de la declaracin del cuerpo del paquete cuando deba mantenerlos a los largo de una sesin o entre transacciones. Para realizar cambios en la especificacin del paquete es necesario recompilar cada subprograma de referencia. La especificacin del paquete debe contener tantas construcciones como sea posible.
Copyright 2004, Oracle. Todos los Derechos Reservados.

Ventajas del Uso de Paquetes


Capacidad de organizacin en mdulos: Encapsulamiento de construcciones relacionadas Fcil mantenimiento: Mantenimiento de funcionalidades relacionadas de forma lgica Fcil diseo de aplicaciones: Codificacin y compilacin de la especificacin y el cuerpo por separado Ocultacin de informacin:
Slo las declaraciones de la especificacin del paquete son visibles y accesibles para las aplicaciones. Las construcciones privadas del cuerpo del paquete estn ocultas y son inaccesibles. Toda la codificacin est oculta en el cuerpo del paquete.
Copyright 2004, Oracle. Todos los Derechos Reservados.

Ventajas del Uso de Paquetes


Funcionalidad adicional: Persistencia de variables y cursores Mejor rendimiento:
El paquete completo se carga en la memoria cuando se hace referencia al mismo por primera vez. Slo existe una copia en la memoria para todos los usuarios. La jerarqua de dependencia se simplifica.

Sobrecarga: Varios subprogramas con el mismo nombre

Copyright 2004, Oracle. Todos los Derechos Reservados.

Resumen
En esta leccin, debe haber aprendido lo siguiente: Mejorar la organizacin, gestin, seguridad y rendimiento del cdigo mediante el uso de paquetes Crear y eliminar cuerpos y especificaciones de paquetes Agrupar funciones y procedimientos relacionados en un paquete Encapsular el cdigo en un cuerpo de paquete Definir y utilizar componentes en paquetes sin cuerpo Cambiar el cuerpo de un paquete sin que la especificacin se vea afectada
Copyright 2004, Oracle. Todos los Derechos Reservados.

Resumen
Comando Tarea

CREATE [OR REPLACE] PACKAGE Crear [o modificar] una especificacin de paquete existente. CREATE [OR REPLACE] PACKAGE Crear [o modificar] un cuerpo BODY de paquete existente. DROP PACKAGE Eliminar la especificacin del paquete y el cuerpo del paquete. Eliminar el cuerpo del paquete solamente.

DROP PACKAGE BODY

Copyright 2004, Oracle. Todos los Derechos Reservados.

Prctica 3: Visin General


En esta prctica se abordan los siguientes temas: Creacin de paquetes Llamada a unidades de programa de paquete

Copyright 2004, Oracle. Todos los Derechos Reservados.

También podría gustarte