typestar

restock_procedure.sql en SQL

Una reposición nocturna: encontrar estantes bajos, rellenar y confirmar sobre la marcha.

-- A nightly restock: walk the low shelves, top up, commit as you go.
CREATE TABLE restock_log (
    sku TEXT NOT NULL,
    added INTEGER NOT NULL,
    logged_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE PROCEDURE restock(threshold INTEGER, top_up INTEGER)
LANGUAGE plpgsql
AS $$
DECLARE
    item RECORD;
    touched INTEGER := 0;
BEGIN
    FOR item IN
        SELECT sku, stock
        FROM products
        WHERE stock < threshold
        ORDER BY stock
    LOOP
        UPDATE products
        SET stock = stock + top_up
        WHERE sku = item.sku;
        INSERT INTO restock_log (sku, added)
        VALUES (item.sku, top_up);
        touched := touched + 1;
        COMMIT;
    END LOOP;
    RAISE NOTICE 'restocked % products', touched;
END;
$$;

CALL restock(threshold => 5, top_up => 10);

SELECT r.sku, r.added, p.stock
FROM restock_log AS r
JOIN products AS p ON p.sku = r.sku
ORDER BY r.sku;

Cómo funciona

  1. El recorrido FOR ... IN SELECT encuentra productos bajo el umbral.
  2. Cada pasada actualiza stock, registra la entrega y confirma su lote con COMMIT.
  3. CALL restock(threshold => 5, top_up => 10) lo corre con argumentos con nombre.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
38
Caracteres a escribir
785
Tokens
171
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

Paso 2 de 3 en Bis; paso 22 de 23 en Procedimientos almacenados de PostgreSQL.

← Anterior Siguiente →