sql - Insertar un valor calculado en la base de datos PLSQL

CorePress2023-11-30  1

Tengo tres mesas

LineItem       Orders        Product

order_id       order_id      product_id
product_id     order_date    product_name
quantity       customer_id   list_price
price          employee_id
               total

Quiero insertar un nuevo valor en la línea de pedido cuyo precio se calcula como precio = cantidad * producto.list_price ¿Cómo puedo usar INSERT INTO para hacer eso?

  • 1 Aparte de las respuestas a su problema directo, cuestionaría su inclusión de datos 'totales' en la tabla PEDIDOS. ¿Total de qué? Asumiría el valor total del pedido, como la suma de LINE_ITEM.PRICE para ese ORDER_ID. Si es así, te garantizo que terminarás desconectado. uno de los fundamentosTodas las reglas de normalización de datos son nunca almacenar lo que se puede calcular, y este parece ser un excelente ejemplo. En lugar de almacenar la suma de PRECIO e intentar mantenerla precisa, simplemente calcúlala cuando la necesites. - EdStevens 6 de junio de 2020 a las 15:18
  • El total es el número total de artículos de línea para un ID de pedido dado. -Thang Nguyen 7 de junio de 2020 a las 0:14
  • 1 Sea lo que sea, se aplica lo mismo. No almacene aquello que pueda calcularse en tiempo de ejecución. Puede SELECCIONAR fácilmente COUNT(*) FROM LINE_ITEM WHERE LINE_ITEM.ORDER_ID = ORDERS.ORDER_ID; Si intentas almacenar eso en PEDIDOS, es solo cuestión de tiempo antes de que suceda algo inesperado y PEDIDOS no se actualice correctamente y, por lo tanto, tendrá un valor incorrecto. Este es el diseño de bases de datos relacionales 101. - EdStevens 7 de junio de 2020 a las 1:45


------------------------

Puedes utilizar la sintaxis insertar... seleccionar. Suponiendo que desea insertar order_id 1, product_id 2 y cantidad 3:

insert into line_item(order_id, product_id, quantity, price)
select 
    1,
    product_id,
    3,
    3 * list_price
from product
where product_id = 2


------------------------

La solución de GMB es perfecta. También puede utilizar la actualización además de esto si desea actualizar el precio de todas las filas existentes en la tabla.

UPDATE l
SET l.price = p.list_price * l.quantity
FROM LineItem l
JOIN Product p ON p.product_id = l.product_id
Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare