I’m trying to do a select and update within the same local procedure. The idea is to retrieve the number of ordered products from a specific order in the view (Produktantal) and then updating the stock numbers (antal) from the table “produktlager” with the data retrieved from the view.
I’m receiving the follow error message Error: ER_BAD_FIELD_ERROR: Unknown column 'Produktantal' in 'field list'
. I don’t seem to be available to access the column in the update part. How can I do this?
x
DROP PROCEDURE IF EXISTS update_stock_status;
DELIMITER ;;
CREATE PROCEDURE update_stock_status(
p_orderid INT
)
BEGIN
SELECT
Produktid,
Orderid,
Produktantal,
Lagerantal,
Hylla
FROM v_products2order_w_products2lager
WHERE Orderid = p_orderid;
UPDATE produkt2lager
SET
antal = antal - Produktantal
WHERE
produktid = Produktid
AND
hylla = Hylla;
END
;;
DELIMITER ;
The view:
DROP VIEW IF EXISTS v_products2order_w_products2lager;
CREATE VIEW v_products2order_w_products2lager AS
SELECT
p2o.produktid AS "Produktid",
p2o.orderid AS "Orderid",
p2o.antal AS "Produktantal",
p2l.antal AS "Lagerantal",
p2l.hylla AS "Hylla"
FROM
produkt2order AS p2o
LEFT OUTER JOIN produkt2lager AS p2l ON p2o.produktid = p2l.produktid;
Advertisement
Answer
The two statements in your procedure are executed independently, and the second statement cannot in any way access the results of the first one.
I suspect that you want the update ... join
syntax:
UPDATE produkt2lager p
INNER JOIN v_products2order_w_products2lager o
ON o.produktid = p.produktid
AND o.hylla = p.hylla
SET p.antal = p.antal - o.produktantal
WHERE o.oderid = p_order_id