返回多于 1 行的 SELECT INTO - ORA-01422
Posted
技术标签:
【中文标题】返回多于 1 行的 SELECT INTO - ORA-01422【英文标题】:SELECT INTO that returns more then 1 row - ORA-01422 【发布时间】:2013-04-27 11:58:22 【问题描述】:我有 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;
/
【问题讨论】:
你的意思是你只想select sum(prod_sale_price * prod_quantity
?不过,您不需要循环,这仅意味着您多次计算相同的值,然后将它们相加,这将给出太高的总数。不确定我是否遗漏了什么......?
你说对了。鉴于订单中有多种产品,我不得不循环,但情况很好。非常感谢您的帮助。
【参考方案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
或引入循环。
【讨论】:
这正是我想做的,非常感谢您的帮助。以上是关于返回多于 1 行的 SELECT INTO - ORA-01422的主要内容,如果未能解决你的问题,请参考以下文章
在执行 SELECT INTO (SQL Server) 之前检查行的存在
Power BI topn 函数:topn 函数由于重复而返回多于 n 行的问题