typestar

COMMIT dentro de un procedimiento en SQL

Solo los procedimientos pueden confirmar a mitad de camino, soltando el trabajo por lotes.

-- Only procedures may COMMIT mid-run, releasing work batch by batch.
CREATE PROCEDURE archive_canceled()
LANGUAGE plpgsql
AS $$
DECLARE
    doomed RECORD;
BEGIN
    FOR doomed IN
        SELECT id
        FROM orders
        WHERE status = 'canceled'
    LOOP
        UPDATE orders
        SET status = 'archived'
        WHERE id = doomed.id;
        COMMIT;
    END LOOP;
END;
$$;

CALL archive_canceled();

SELECT id, status
FROM orders
WHERE status = 'archived';

Cómo funciona

  1. El bucle FOR ... IN SELECT visita cada pedido cancelado.
  2. Cada pasada archiva un pedido y hace COMMIT antes de la siguiente.
  3. Un fallo a mitad de corrida conserva cada lote ya confirmado — el punto del patrón.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
25
Caracteres a escribir
395
Tokens
67
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 62 segundos.

Escribe este fragmento

Paso 3 de 4 en Procedimientos y transacciones; paso 11 de 23 en Procedimientos almacenados de PostgreSQL.

← Anterior Siguiente →