Comprender la diferencia entre procedimientos y funciones.
Aprender a crear y ejecutar procedimientos almacenados.
Implementar funciones para reutilizar lógica en SQL.
¿Qué son?
Procedimiento almacenado: bloque de código SQL que se ejecuta bajo demanda.
Función: devuelve siempre un valor y puede usarse en consultas.
Ejemplo de Procedimiento
DELIMITER //
CREATE PROCEDURE obtenerPedidosCliente(IN clienteId INT)
BEGIN
SELECT * FROM pedidos WHERE cliente_id = clienteId;
END //
DELIMITER ;
-- Ejecución
CALL obtenerPedidosCliente(3);
Ejemplo de Función
DELIMITER //
CREATE FUNCTION totalPedidos(clienteId INT)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
DECLARE total DECIMAL(10,2);
SELECT SUM(total) INTO total
FROM pedidos
WHERE cliente_id = clienteId;
RETURN total;
END //
DELIMITER ;
-- Uso
SELECT nombre, totalPedidos(id) AS gasto
FROM clientes;
Ventajas
Reutilización de lógica compleja.
Mayor seguridad: control de accesos a datos.
Menor tráfico entre aplicación y base de datos.
Parámetros
IN: entrada.
OUT: salida.
INOUT: entrada y salida.
CREATE PROCEDURE actualizarSaldo(IN clienteId INT, IN monto DECIMAL)
BEGIN
UPDATE clientes SET saldo = saldo + monto WHERE id = clienteId;
END;
Funciones Escalares
Devuelven un único valor.
totalPedidos(clienteId)
edadPromedio()
Funciones con Tablas
Devuelven un conjunto de registros (dependiendo del SGBD).
-- PostgreSQL ejemplo
CREATE FUNCTION pedidos_cliente(cid INT)
RETURNS TABLE(id INT, fecha DATE, total DECIMAL) AS $$
SELECT id, fecha, total FROM pedidos WHERE cliente_id = cid;
$$ LANGUAGE SQL;
SELECT * FROM pedidos_cliente(3);
Buenas Prácticas
Nombrar procedimientos y funciones claramente.
Evitar lógica de negocio excesiva en SQL.
Documentar parámetros y retornos.
Ejercicio Guiado
Crea un procedimiento para registrar un nuevo pedido.
Define una función que devuelva el total gastado por un cliente.