Avanzado
20 min de lecturaProcedures
Procedimientos almacenados con lógica de negocio
Los procedimientos almacenados (PROCEDURE) son bloques de código que se ejecutan en el servidor de la base de datos.
Crear un procedimiento
sql
1CREATE OR REPLACE PROCEDURE transferir_fondos(2 cuenta_origen INT,3 cuenta_destino INT,4 monto DECIMAL5)6LANGUAGE plpgsql7AS $$8BEGIN9 -- Verificar saldo suficiente10 IF (SELECT saldo FROM cuentas WHERE id = cuenta_origen) < monto THEN11 RAISE EXCEPTION 'Saldo insuficiente';12 END IF;13 14 -- Realizar transferencia15 UPDATE cuentas SET saldo = saldo - monto WHERE id = cuenta_origen;16 UPDATE cuentas SET saldo = saldo + monto WHERE id = cuenta_destino;17 18 -- Registrar transacción19 INSERT INTO transacciones (cuenta_origen, cuenta_destino, monto)20 VALUES (cuenta_origen, cuenta_destino, monto);21END;22$$;Ejecutar procedimiento
sql
1CALL transferir_fondos(1, 2, 500.00);Diferencia con funciones
Sintaxis
Sintaxis
sql
1CREATE [OR REPLACE] PROCEDURE nombre(parámetros)2LANGUAGE plpgsql3AS $$4BEGIN5 -- lógica6END;7$$;Ejemplos
Procedimiento de registro
Registrar usuario con validación
Ejemplo
sql
1CREATE OR REPLACE PROCEDURE registrar_usuario(2 p_nombre TEXT,3 p_email TEXT,4 p_edad INT5)6LANGUAGE plpgsql7AS $$8BEGIN9 IF EXISTS (SELECT 1 FROM usuarios WHERE email = p_email) THEN10 RAISE EXCEPTION 'El email ya está registrado';11 END IF;12 13 INSERT INTO usuarios (nombre, email, edad)14 VALUES (p_nombre, p_email, p_edad);15END;16$$;17 18CALL registrar_usuario('Nuevo', 'nuevo@email.com', 25);Resultado:
CALL