Procedimientos
Almacenados
Definición:
Un procedimiento almacenado es un conjunto de sentencias SQL
precompiladas que se almacena en la base de datos y se puede
invocar posteriormente. Se utiliza para realizar tareas específicas
y puede aceptar parámetros de entrada y devolver valores.
Se pueden ver como "funciones" o "mini-programas" que
ejecutan tareas específicas
Ventajas
● Reutilización de código: Permiten encapsular lógica compleja que puede ser
reutilizada en diferentes partes de una aplicación.
● Rendimiento: Reducen la cantidad de datos que necesitan ser transferidos entre la
aplicación y el servidor de la base de datos, ya que las operaciones se realizan en el
servidor.
● Mantenimiento: Facilitan el mantenimiento del código al centralizar la lógica en
un único lugar.
● Seguridad: Pueden ayudar a proteger la base de datos al limitar el acceso directo a
las tablas y al permitir sólo la ejecución de procedimientos específicos.
Desventajas
● Complejidad: Pueden incrementar la complejidad del sistema,
especialmente si no se documentan adecuadamente.
● Dificultad en la depuración: La depuración de procedimientos
almacenados puede ser más difícil que el código en la aplicación
debido a su naturaleza encapsulada.
● Gestión de versiones: La gestión de cambios en procedimientos
almacenados puede ser un desafío si no se lleva un control
adecuado.
Estructura y Sintaxis
DELIMITER: Cambia el
delimitador de MySQL para Para llamar al
permitir que el procedimiento se procedimiento
La sintaxis básica para crear un
procedimiento almacenado en ejecute sin problemas. Por almacenado, se
MySQL es la siguiente: defecto, el delimitador es punto utiliza:
y coma (;). CALL
DELIMITER // CREATE PROCEDURE: Crea el nombre_del_procedimien
to
CREATE PROCEDURE nombre_del_p procedimiento almacenado con
el nombre indicado. (parametro1,
BEGIN
parámetros: Se pueden definir @parametro2);
parámetros de entrada (IN), de
-- Código SQL aquí salida (OUT) o ambos (INOUT).
END //
BEGIN ... END: Encierra el
DELIMITER ; conjunto de instrucciones SQL
Aspectos de Rendimiento
Factores que afectan el rendimiento:
● Número de filas procesadas
● Complejidad de las consultas
● Uso de índices
● Parámetros utilizados
Recomendaciones:
● Evitar cursores cuando sea posible
● Usar índices apropiadamente
● Minimizar la cantidad de datos procesados
Seguridad
● Prevención de SQL Injection
● Encapsulación de lógica sensible
● Auditoría de accesos y modificaciones
Ejemplo:
GRANT: Es el comando que otorga permisos
EXECUTE: Es el tipo de permiso que se está otorgando
ON ObtenerClientesPorPais: Es el objeto (en este caso el procedimiento almacenado) sobre el que se otorga el
permiso
TO RolVentas: Es el rol o usuario al que se le otorga el permiso
Casos de uso
● Operaciones complejas: Para realizar cálculos o transformaciones de
datos que requieren múltiples pasos.
● Mantenimiento de datos: Para insertar, actualizar o eliminar datos de
forma consistente y controlada.
● Automatización de tareas: Para programar tareas recurrentes, como la
limpieza de datos o la generación de informes.
● Validaciones y lógica de negocio: Para implementar reglas de negocio
que deben cumplirse antes de realizar operaciones en la base de datos.
Hábitos Ideales Formato de Documentación:
Nomenclatura:
● Usar prefijos (sp_, usp_)
● Nombres descriptivos
● Consistencia en el estilo
● Manejo de Errores
● Documentación
Control de Versiones:
● Mantener historial de cambios en comentarios
● Usar sistema de control de versiones
● Documentar cambios importantes
Ejemplo en BDCeti
El siguiente procedimiento almacenado toma todas las calificaciones de la columna
calificacion, calcula el promedio y lo devuelve como un parámetro de salida.
CREATE PROCEDURE obtenerPromedioCalificacion(OUT promedio TINYINT)
BEGIN
SELECT AVG(calificacion) INTO promedio FROM calificacion;
END;
Para ejecutar este procedimiento y obtener el resultado, se puede hacer lo siguiente:
CALL obtenerPromedioCalificacion(@resultado);
SELECT @resultado AS promedio;
Bibliografias
● GeeksforGeeks. (2024). Stored Procedures in SQL.
● Microsoft. (2024). SQL Server Documentation
● Oracle Corporation. (2024). Oracle Database
Documentation.
● Coronel, C., & Morris, S. (2024). Database Systems