SELECT INTO, который возвращает более 1 строки - ORA-01422
У меня есть 3 таблицы:
products (prod_id, prod_name, prod_sale_price), order_details (order_id, prod_id, prod_quantity)
а также orders (order_id, order_date, cust_id, emp, id)
,
В основном я пытаюсь создать функцию, которая получает общую стоимость заказа, когда order_id
это ввод, но у меня возникли проблемы при попытке вставить его в код.
Конкретно пытаясь поместить каждый продукт в отдельную переменную.
CREATE OR REPLACE FUNCTION TotalOrderCost (input_id IN NUMBER)
RETURN NUMBER
IS
given_id NUMBER := input_id;
prod_count NUMBER;
prod_id NUMBER;
prod_price_by_quantity NUMBER := 0;
total_order_cost NUMBER := 0;
BEGIN
SELECT COUNT(prod_id)
INTO prod_count
FROM order_details
WHERE order_id = given_id;
FOR i IN 1..prod_count
LOOP
/* select into that returns more then 1 row when there is more than one product in the order*/
SELECT prod_sale_price*prod_quantity
INTO prod_price_by_quantity
FROM order_details od
JOIN products p
ON od.prod_id = p.prod_id
WHERE order_id = given_id;
total_order_cost := total_order_cost + prod_price_by_quantity;
END LOOP;
RETURN total_order_cost;
END TotalOrderCost;
/
1 ответ
Решение
Похоже, вы просто хотите SUM
SELECT SUM(prod_sale_price*prod_quantity)
INTO total_order_cost
FROM order_details od
JOIN products p
ON od.prod_id = p.prod_id
WHERE order_id = given_id;
Кажется, нет необходимости делать COUNT
или ввести цикл.