Sepa como Estructurar Eficientemente los Packages en Oracle

Saber cómo estructurar los Packages en Oracle  es una habilidad que es necesario adquirir para poder construir programas y/o sistemas que sean ordenados, legibles por cualquier desarrollador de Oracle y que sean fáciles de modificar para poder incluir nuevas mantenciones que se requieran en el futuro.

Los Packages en Oracle son una de las mejores herramientas que entrega Oracle para el desarrollo de software de Base de Datos, es una herramienta relativamente nueva de Oracle ya que en sus primeras versiones no existía. Los Packages en Oracle constan de dos partes, la primera es el SPEC o Cabecera y la segunda es el BODY o Cuerpo.

Revisemos el SPEC.

En el SPEC de un Package se definen las cabeceras de Procedures en Oracle  y Function en Oracle, constantes, cursores, variables globales, definición de estructuras, etc.  Ahora veamos un ejemplo de SPEC:

CREATE OR REPLACE PACKAGE PKG_MANTENCION_EMPLEADOS AS

/* Constantes en Oracle*/                                                                                                      c_Edad_Minima              Constant Number (2):= 25;                                                                      c_Edad_Maxima     Constant Number (2):= 65;

/* Variables Globales */                                                                                                                      g_Total_Empleados       Number (10);

/* Procedures en Oracle */                                                                                                                    Procedure Prc_Datos_Empleado(  p_Rut      In Number,                                                                p_Nombre Out Varchar2,                                                                                                                   p_Direccion Out Varchar2,                                                                                                                      p_Edad Out Number,                                                                                                                         p_Id_Departamento Out Number) ;

/* Function en Oracle */                                                                                                                       Function Fnc_Edad_Empleado ( p_Rut      In Number) Return Number;

END PKG_MANTENCION_EMPLEADOS;                                                                                                           /

En este ejemplo de SPEC se puede apreciar la declaración de dos constantes, una variable pública, un Stored Procedure y una Function en Oracle, nótese que en la declaración del Procedure y la Function la sentencia IS es reemplazada por un punto y coma ‘;’.

Revisemos el BODY.

En el BODY se construyen todos los Procedures en Oracle  y Function en Oracle  que han sido definidos en el SPEC, en este lugar también se pueden definir constantes, variables globales, etc. Todo depende de las preferencias del desarrollador,  pero para mantener un código ordenado se recomienda colocarlas todas estas definiciones en el SPEC o todas en el BODY, pero no en ambos lugares. Ahora veamos un ejemplo de BODY:

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

CREATE OR REPLACE PACKAGE BODY PKG_MANTENCION_EMPLEADOS AS

/* Procedures en Oracle */                                                                                                                    Procedure Prc_Datos_Empleado(  p_Rut      In Number,                                                                                              p_Nombre Out Varchar2,                                                                                                                   p_Direccion Out Varchar2,                                                                                                                       p_Edad Out Number,                                                                                                                         p_Id_Departamento Out  Number)  Is                                                                                                                             Begin                                                                                                                                                             Select emp.nombre, emp.direccion, emp.edad, emp.id_departamento                         Into p_Nombre, p_Direccion, p_Edad, p_Id_Departamento                                                       From T_Empleados Emp                                                                                                         Where Emp.Rut = p_Rut;

Exception                                                                                                                                                      When No_Data_Found Then p_Nombre:= ‘Empleado no encontrado’;                                                                                                                                    End Prc_Datos_Empleado;

/* Function en Oracle */                                                                                                        Function Fnc_Edad_Empleado(p_Rut      In Number) Return Number Is                              l_Edad Number;                                                                                                                          Begin                                                                                                                                                             Select emp.edad Into l_Edad From T_Empleados Emp Where Emp.Rut = p_Rut; Return l_Edad;                                                                                                                                    Exception                                                                                                                                                       When No_Data_Found Then Return 0;                                                                             End Fnc_Edad_Empleado;

END PKG_MANTENCION_EMPLEADOS;                                                                                   /

En este ejemplo de BODY se encuentran desarrollados los procesos que se definieron en el SPEC, lo que está dentro de los caracteres ‘/* */’ corresponden a comentarios, por regla general en la definición de Packages en Oracle tanto para el SPEC y BODY siempre deben finalizarse con el carácter ‘/’ lo que permite que se compilen correctamente. Disculpen la indentación pero es complicado escribir código en un blog, pueden copiar los ejemplos en su propio editor y los indentan para verlos mas claramente.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Packages en Oracle y etiquetada , , , , . Guarda el enlace permanente.

8 respuestas a Sepa como Estructurar Eficientemente los Packages en Oracle

  1. Pedro dijo:

    Me Parece muy interesante y ordenado tu artículo, pero encontre un bug en tu definición CREATE OR REPLACE PACKAGE y no PACKEGE como dice arriba, respecto a lo nuevo en Oracle 11g ya es posible crear Paquetes de procedimientos con html embebido, esto es muy útil en aplicaciones abiertas web, me gustaría que nos dieras un ejemplo de esa nueva utilidad.

    • Pedro, gracias por escribir, ya corregi el error de sintaxis, respecto de tu consulta no he utilizado aún esa herramienta que indicas de Oracle 11g, pero te puede decir que no es recomendable usar código pl-sql embebido en html o en cualquier otro lenguaje debido a que presentan problemas de velocidad en la ejecución a diferencia de usar un procedimiento escrito directamente en el motor de la base de datos, saludos.

      • diosOdin dijo:

        Estimado Roberto,
        Creo que Pedro se refiere a utilizar html embebido en pl/sql y no al revés como creo que tu has entendido.
        Me parece muy interesante que nos presentaras un ejemplo de ello, y orientar los riesgos que hay en utilizar estas potencialidades de Oracle, También están los temas de utilizar Java incluso llamar webservice desde la base de datos.

        saludos,

      • Hola Odin, gracias por comunicarte y por tu comentario, estamos trabajando en nuevo material para entregar información sobre html, java y webservice interactuando con Oracle, gracias.

        PD: Ya obtuviste mi libro-reporte sobre ‘Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde aquí:
        http://dominatuspackagesenoracle.com/

        Saludos
        Roberto Vicencio – Para Tu Éxito con Oracle.

  2. edusantos dijo:

    soy nuevo e esto pero por el trabajo requiero aprender ala brevedad
    la dificultad esta en el lenguaje pl/sql no lo domino. cuales son los tips mas usados
    para aplicaciones practicas.
    como deben ser los procedimientos almacenados para hacer una la aplicacion de asp .net vs oracle.
    se debe subir una imagenes satelitales con sus datos a una base de datos en oracle
    y de asp se debe acceder a una base datos oracle
    como serian los procedimientos almacendos ..todo lo relacionado a estos procedimientos???
    Gracias

    • Hola edusantos, para comenzar a trabajar con los procedimientos almacenados en Oracle puedes empezar leyendo todos los artículos que estoy entregando en mi blog gratuitamente, donde te enseño tips llevados a la práctica, los procedimientos almacenados se deben construir de la misma manera para que trabajen con cualquier lenguaje como asp .net, java, etc., solo cambia la forma de como son ejecutados o accedidos estos procedimientos desde cada lenguaje, el asp no lo conozco por lo que no puedo decirte como se conecta con Oracle, eso debes buscarlo en el manual de asp. Las imagenes en Oracle debes grabarlas en un campo de tipo BLOB en tu tabla, espero haber respondido tus preguntas.

      Saludos
      Roberto Vicencio.

  3. Hola… Hay forma de crear un SPEC y tener dos BODYS ?? Y si es así, cuándo es recomendable utilizarlo?

    • Hola Lisbeth, gracias por comunicarte, hasta donde se no es posible ya que el spec y el body deben tener el mismo nombre, ademas no encuentro una razón para hacer esto, ya que si necesito tener otro body lo mas lógico es crear un nuevo package, gracias.

      PD: Ya obtuviste mi Libro-Reporte Gratis sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aun lo tienes puedes obtenerlo desde aquí:
      http://dominatuspackagesenoracle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s