Café y Código

2. Procedimientos Almacenados (Stored Procedures) 📦

Variables Guardadas permanentemente

Un bloque anónimo está cool para probar, pero ¿qué pasa si quieres ejecutar ese mismo código todos los días? Ahí es cuando lo conviertes en un Procedimiento Almacenado (o Stored Procedure).

Es exactamente lo mismo que una "función" en Java o Python, pero vive permanentemente dentro del motor de la Base de Datos.

Sintaxis de un Procedure

Para guardarlo, le damos un nombre usando CREATE OR REPLACE PROCEDURE y le definimos parámetros de entrada (IN) o de salida (OUT).

SQL
1 -- Creamos el procedimiento que recibe el ID de un empleado y le da un bono
2 CREATE OR REPLACE PROCEDURE DarBonoEmpleado (
3 p_empleado_id IN NUMBER,
4 p_monto_bono IN NUMBER
5 )
6 IS -- La palabra IS o AS reemplaza al "DECLARE"
7 v_salario_actual NUMBER;
8 BEGIN
9 -- 1. Buscamos el salario actual
10 SELECT salario INTO v_salario_actual
11 FROM empleados
12 WHERE id = p_empleado_id;
13
14 -- 2. Actualizamos al empleado
15 UPDATE empleados
16 SET salario = v_salario_actual + p_monto_bono
17 WHERE id = p_empleado_id;
18
19 COMMIT; -- Guardamos los cambios
20 DBMS_OUTPUT.PUT_LINE('Bono aplicado exitosamente');
21 EXCEPTION
22 WHEN NO_DATA_FOUND THEN
23 DBMS_OUTPUT.PUT_LINE('Error: El empleado no existe');
24 END DarBonoEmpleado;

¿Por qué son tan usados en las empresas?

  • Velocidad: El código ya está compilado en la BD, por lo que corre mucho más rápido que si Node.js mandara 10 queries sueltos.
  • Seguridad: Puedes quitarle permisos a los usuarios para hacer un DELETE directo en la tabla Empleados, pero darle permiso para ejecutar el Procedure DarBonoEmpleado.
  • Tráfico de red: Mandas solo 1 orden ("Ejecuta el Procedure Y"), en vez de enviar 50 líneas de código SQL por el servidor web cada vez.

🎮 Ejecutando un Procedure

Una vez creado el procedure de arriba, ¿cómo harías para invocarlo desde un bloque anónimo para darle $500 al empleado con ID 10?

👁️ Ver respuesta sugerida
SQL
1 BEGIN
2 DarBonoEmpleado(10, 500);
3 END;

Ponte a prueba

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.