martes, 23 de mayo de 2017

ORACLE: Paquetes, Funciones y Procedimientos

No voy a dar una catedra de conceptos de cada una, pero voy a tratar de explicarlo de forma muy simple.

Paquete: Conjunto de Funciones y/o Procedimientos almacenados de PL/SQL (select, insert, update, delete, etc)
Función: conjunto de instrucciones (Código PL/SQL) que puede estar dentro de un paquete para realizar cierta tarea, este código siempre debe devolver un valor (ya sea resultado de una oepración o no).
Procedimiento: conjunto de instrucciones (Código PL/SQL), que puede estar dentro de un paquere para realizar cierta tarea especifica, este sepuede utilizar para realizar tareas que no requieren enviar un resultado de su ejecución.

Ambos permiten parametros IN/OUT sin embargo las funciones son las idoneas para retornar grandes resultados, como resultados de una buqueda, en cambio los procedimientos son mas ad hoc para los tradicionales metodos CRUD (Create, Read, Update and Delete).

Ejemplo de Funcion:
Definición en un paquete:  
    FUNCTION get_persona(p_nombre       poblacion.persona.nombre%TYPE DEFAULT '%')
    RETURN ref_cursor;
Definición del Body:
FUNCTION get_persona(p_nombre poblacion.persona.nombre%TYPE DEFAULT '%')
   RETURN REF_CURSOR
   AS
           V_CURSOR        REF_CURSOR;
   BEGIN
           OPEN V_CURSOR FOR
           SELECT ID, NOMBRE, APELLIDOS, EDAD FROM POBLACION.PERSONAS
           WHERE APELLIDOS LIKE P_FREIGHTER_ID
           ORDER BY NOMBRE, APELLIDOS;


           RETURN V_CURSOR;
   END get_persona;
Ejemplo de procedimiento:

PROCEDURE UPD_EDAD_PERSONA(P_ID  IN POBLACION.PERSONA.ID%TYPE, P_EDAD    IN OUT POBLACION.PERSONA.EDAD%TYPE);
PROCEDURE UPD_EDAD_PERSONA(P_ID  IN POBLACION.PERSONA.ID%TYPE, P_EDAD    IN OUT POBLACION.PERSONA.EDAD%TYPE)
   IS
   BEGIN
           SELECT POBLACION.PERSONA.EDAD +1 INTO P_EDAD FROM
POBLACION.PERSONA WHERE ID = P_ID;

           UPDATE POBLACION.PERSONA SET EDAD = P_EDAD WHERE ID = P_ID;


   END
UPD_EDAD_PERSONA;
Realmente creo no hay mucho que explicar de los ejemplos, en el ejemplo d ela función es una busqueda por nombre y en el de procedimientos es la actualización de la edad, dicho procedimiento se puede ejecutar de muchas formas sin necesidad de que retorne un valor.

Recuerden la definición del curso es en la creación del paquete:

create or replace PACKAGE    personas_rpt_pkg
AS
    /** Java Compliant ready */
    TYPE ref_cursor IS REF CURSOR;


Espero les sirva este pequeño ejemplo.

No hay comentarios: