【问题标题】:SELECT INTO that returns more then 1 row - ORA-01422返回多于 1 行的 SELECT INTO - 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?不过,您不需要循环,这仅意味着您多次计算相同的值,然后将它们相加,这将给出太高的总数。不确定我是否遗漏了什么......?
  • 你说对了。鉴于订单中有多种产品,我不得不循环,但情况很好。非常感谢您的帮助。

标签: oracle plsql select-into ora-01422


【解决方案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 或引入循环。

【讨论】:

  • 这正是我想做的,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 2016-11-29
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多