Entra un pedido
La aplicación solo hace dos INSERT: la cabecera en pedidos y sus líneas en lineas_pedido, dentro de una transacción. Si una línea no tiene stock, un trigger BEFORE INSERT lanza un error y se deshace todo el pedido.
Bases de datos · Proyecto 03
La lógica de negocio vive en la base de datos: cada pedido descuenta stock, deja rastro en la auditoría y, si un producto baja del mínimo, genera sola la orden de compra al proveedor. Sin intervención manual.
ⓘ Datos ficticios · motor SQL real (SQLite) ejecutándose en tu navegador.
Se descarga SQLite compilado a WebAssembly (~650 KB) y se crean las tablas, los triggers y los datos de ejemplo.
La demo necesita descargar SQLite (WebAssembly) desde un CDN y parece que no ha sido posible. Comprueba tu conexión o algún bloqueador de contenido y vuelve a intentarlo. Mientras tanto, el código SQL y PL/SQL sigue disponible más abajo.
| Producto | Stock | Mín / Máx | Precio | Estado |
|---|
Aún no se ha ejecutado ningún cierre. Pulsa «Ejecutar cierre diario»: un bloque de sentencias en una transacción resume los pedidos abiertos, registra alertas de stock y cierra los pedidos (en Oracle, el procedimiento cierre_diario).
Lanza cualquier consulta contra la base de datos de la demo. Si modificas datos, los triggers se disparan igual y los paneles de arriba se actualizan.
Esperando al motor SQL…
La aplicación solo hace dos INSERT: la cabecera en pedidos y sus líneas en lineas_pedido, dentro de una transacción. Si una línea no tiene stock, un trigger BEFORE INSERT lanza un error y se deshace todo el pedido.
Por cada línea, un trigger AFTER INSERT descuenta el stock y suma el importe al pedido. Cada cambio de stock dispara a su vez otro trigger que escribe una fila en auditoria: trazabilidad completa sin depender del código de la app.
Si el stock cae por debajo del mínimo, se crea una orden de compra al proveedor por la cantidad necesaria hasta el máximo (solo una pendiente por producto). Al final del día, el cierre resume ventas y alertas y cierra los pedidos; en Oracle lo lanza un job de DBMS_SCHEDULER.
La demo ejecuta SQLite en tu navegador (compilado a WebAssembly con sql.js) para que puedas tocarla sin servidor. En producción, la misma lógica se implementa en Oracle con PL/SQL: triggers FOR EACH ROW con bloqueo de fila, un procedimiento cierre_diario con cursor y manejo de excepciones, auditoría en transacción autónoma y un job programado. Abajo tienes ambas versiones.