Misión 2 · Lección 8

Procedimientos Almacenados y Funciones

Objetivos

¿Qué son?

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

Parámetros

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.

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

Ejercicio Guiado

  1. Crea un procedimiento para registrar un nuevo pedido.
  2. Define una función que devuelva el total gastado por un cliente.
  3. Prueba ambas con datos de ejemplo.