我的代码基本上在这里,要做的工作是使用PL/SQL获得每个地区的总销售额。
我的方法是创建一个光标在区域上循环以得到总和。2我尝试使用内部和外部循环,但结果是在同一个区域上循环而不移动到下一个。3我该如何解决这个问题?
DECLARE
TERRITORY_ID NUMBER(5);
TERRITORY_DESC VARCHAR(50);
TOTAL_SALES NUMBER(10);
NUMBER_SOLD NUMBER(5);
UNIT_PRICE NUMBER(10);
SUBTOTAL NUMBER(10);
TOTAL NUMBER(10):= 0;
CURSOR CURSOR_2 IS
SELECT T.TERRITORYID, T.TERRITORYDESCRIPTION, OD.QUANTITY,OD.UNITPRICE
FROM TERRITORIES T, ORDERS O, ORDERDETAILS OD
WHERE T.TERRITORYID = O.TERRITORYID
AND O.ORDERID = OD.ORDERID;
BEGIN
DBMS_OUTPUT.put_line('TERRITORY_ID' || '|' ||'TERRITORY_DESC' || '|' ||'TOTAL');
FOR T IN (SELECT UNIQUE T.TERRITORYID FROM TERRITORIES T) LOOP
TOTAL := 0;
OPEN CURSOR_2;
LOOP
FETCH CURSOR_2 INTO TERRITORY_ID, TERRITORY_DESC, NUMBER_SOLD, UNIT_PRICE;
EXIT WHEN CURSOR_2%NOTFOUND;
SUBTOTAL := NUMBER_SOLD * UNIT_PRICE;
TOTAL := TOTAL + SUBTOTAL;
END LOOP;
DBMS_OUTPUT.put_line(TERRITORY_ID || '|' ||TERRITORY_DESC || '|' ||TOTAL);
CLOSE CURSOR_2;
END LOOP;
END;
2条答案
按热度按时间2izufjch1#
您遇到问题是因为您没有将
cursor_2
与第一个游标FOR循环获取的区域关联起来。如果重写代码(并稍微简化),您将得到
我不能测试它,因为我没有你的表和数据,虽然。
另一方面,你真的需要使用嵌套循环吗?只使用一个循环怎么样?
最后,您实际上根本不需要PL/SQL,因为游标的查询本身会返回您需要的数据:
7kjnsjlb2#
不要使用游标或循环(甚至PL/SQL),只需在SQL中执行聚合即可: