oracle ORA-01422:精确提取返回的行数多于请求的行数

iqih9akk  于 2023-01-01  发布在  Oracle
关注(0)|答案(1)|浏览(158)
DECLARE
  o_id    Order_Items.Order_ID%TYPE;
  i_id    NUMBER(10);
  qun     Order_Items.Quantity%TYPE;
  u_price Order_Items.Unit_Price%TYPE;
  total   INT;

  CURSOR Orders IS SELECT * FROM Order_Items;    
BEGIN
  total := u_price * qun;
  SELECT Order_Items.order_id, COUNT(item_id) item_count, SUM(unit_price * quantity) total
    INTO o_id, i_id, total
    FROM Order_items
   GROUP BY order_id
  HAVING SUM(unit_price * quantity) > 500000 
     AND COUNT(item_id) BETWEEN 10 AND 12
   ORDER BY total DESC, item_count DESC;

  dbms_output.put_line(LPAD('-', 60, '-'));
  dbms_output.put_line(RPAD('Order ID', 20) || RPAD('Item Count', 20) ||RPAD('Total', 20));
  dbms_output.put_line(LPAD('-', 60, '-'));
  dbms_output.put_line(RPAD(o_id, 20) || RPAD(i_id, 20) || RPAD(total, 20));
  dbms_output.put_line(LPAD('-', 60, '-'));

END;
/

使用HAVING子句,我编写了一个PL/SQL代码来查找值大于500,000且每个订单中的产品数量介于10和12之间的订单。
但是,我得到了ORA-01422错误。可能是什么问题?

vwkv1x7d

vwkv1x7d1#

您的“Order_items”中有多个不同的“order_id”,因此您无法将结果提取到变量中:必须将LOOP或BULK COLECT放入记录表中。

相关问题