En este módulo, aprenderemos sobre los procedimientos y funciones almacenadas en PostgreSQL. Estas herramientas son fundamentales para la creación de lógica de negocio en la base de datos, permitiendo la ejecución de operaciones complejas de manera eficiente y reutilizable.
¿Qué son los Procedimientos y Funciones Almacenadas?
Procedimientos Almacenados
Un procedimiento almacenado es un conjunto de instrucciones SQL que se almacenan en la base de datos y se pueden ejecutar cuando sea necesario. Los procedimientos almacenados pueden aceptar parámetros de entrada y salida, y pueden realizar operaciones como insertar, actualizar, eliminar y consultar datos.
Funciones Almacenadas
Las funciones almacenadas son similares a los procedimientos almacenados, pero están diseñadas para devolver un valor. Las funciones pueden ser utilizadas en consultas SQL como si fueran columnas o expresiones.
Creación de Procedimientos Almacenados
Sintaxis Básica
CREATE PROCEDURE nombre_procedimiento (parámetros) LANGUAGE plpgsql AS $$ BEGIN -- Cuerpo del procedimiento END; $$;
Ejemplo Práctico
Vamos a crear un procedimiento almacenado que inserta un nuevo registro en una tabla de empleados.
CREATE PROCEDURE insertar_empleado( nombre VARCHAR, apellido VARCHAR, salario NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN INSERT INTO empleados (nombre, apellido, salario) VALUES (nombre, apellido, salario); END; $$;
Ejecución del Procedimiento
Para ejecutar el procedimiento almacenado, utilizamos la instrucción CALL
.
Creación de Funciones Almacenadas
Sintaxis Básica
CREATE FUNCTION nombre_funcion (parámetros) RETURNS tipo_de_dato LANGUAGE plpgsql AS $$ BEGIN -- Cuerpo de la función RETURN valor; END; $$;
Ejemplo Práctico
Vamos a crear una función almacenada que calcula el salario anual de un empleado.
CREATE FUNCTION calcular_salario_anual(salario_mensual NUMERIC) RETURNS NUMERIC LANGUAGE plpgsql AS $$ BEGIN RETURN salario_mensual * 12; END; $$;
Uso de la Función en una Consulta
Podemos utilizar la función en una consulta SQL como si fuera una columna.
Ejercicios Prácticos
Ejercicio 1: Crear un Procedimiento Almacenado
Crea un procedimiento almacenado llamado actualizar_salario
que actualice el salario de un empleado basado en su ID.
CREATE PROCEDURE actualizar_salario( id_empleado INT, nuevo_salario NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN UPDATE empleados SET salario = nuevo_salario WHERE id = id_empleado; END; $$;
Ejercicio 2: Crear una Función Almacenada
Crea una función almacenada llamada obtener_empleado
que devuelva el nombre completo de un empleado basado en su ID.
CREATE FUNCTION obtener_empleado(id_empleado INT) RETURNS VARCHAR LANGUAGE plpgsql AS $$ DECLARE nombre_completo VARCHAR; BEGIN SELECT nombre || ' ' || apellido INTO nombre_completo FROM empleados WHERE id = id_empleado; RETURN nombre_completo; END; $$;
Soluciones
Solución al Ejercicio 1
CREATE PROCEDURE actualizar_salario( id_empleado INT, nuevo_salario NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN UPDATE empleados SET salario = nuevo_salario WHERE id = id_empleado; END; $$;
Solución al Ejercicio 2
CREATE FUNCTION obtener_empleado(id_empleado INT) RETURNS VARCHAR LANGUAGE plpgsql AS $$ DECLARE nombre_completo VARCHAR; BEGIN SELECT nombre || ' ' || apellido INTO nombre_completo FROM empleados WHERE id = id_empleado; RETURN nombre_completo; END; $$;
Conclusión
En esta sección, hemos aprendido sobre los procedimientos y funciones almacenadas en PostgreSQL. Estas herramientas nos permiten encapsular lógica de negocio en la base de datos, facilitando la reutilización y el mantenimiento del código. Hemos visto cómo crear y ejecutar procedimientos y funciones almacenadas, y hemos practicado con algunos ejercicios. En el próximo módulo, exploraremos las transacciones y la concurrencia en PostgreSQL.
Curso de PostgreSQL
Módulo 1: Introducción a PostgreSQL
Módulo 2: Operaciones Básicas de SQL
- Creando Bases de Datos y Tablas
- Insertando Datos
- Consultando Datos
- Actualizando Datos
- Eliminando Datos
Módulo 3: Consultas Avanzadas de SQL
Módulo 4: Diseño de Bases de Datos y Normalización
Módulo 5: Características Avanzadas de PostgreSQL
Módulo 6: Ajuste de Rendimiento y Optimización
- Optimización de Consultas
- Estrategias de Indexación
- Análisis del Rendimiento de Consultas
- Vacuuming y Mantenimiento
Módulo 7: Seguridad y Gestión de Usuarios
Módulo 8: Trabajando con JSON y Características NoSQL
Módulo 9: Extensiones y Herramientas Avanzadas
- PostGIS para Datos Geoespaciales
- Búsqueda de Texto Completo
- Wrappers de Datos Externos
- PL/pgSQL y Otros Lenguajes Procedurales