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 '%')Ejemplo de procedimiento:
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;
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)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.
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;
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:
Publicar un comentario