ORA-01001:在Oracle SQL Developer中使用函数时无效的游标?

ORA-01001:在Oracle SQL Developer中使用函数时无效的游标?

问题描述:

我创建了一个以Customer_id作为输入的函数,并返回一个代表此客户订单总成本的数字。我必须将表order_details中的Order_Qty和表项中的Unit_Price相乘,以获得每个订单的总成本。ORA-01001:在Oracle SQL Developer中使用函数时无效的游标?

这是我的代码:

CREATE OR REPLACE FUNCTION FIND_TOTAL 
(CUSTOMER_ID_IN IN VARCHAR2) 
RETURN NUMBER IS 
ORDER_QTY_IN NUMBER; 
UNIT_PRICE_IN NUMBER; 
TOTAL_COST_OUT NUMBER; 
CURSOR C1 IS 
SELECT od.ORDER_QTY 
FROM ORDER_DETAILS od JOIN ORDERS o 
ON od.ORDER_ID = o.ORDER_ID 
WHERE CUSTOMER_ID = CUSTOMER_ID_IN; 
CURSOR C2 IS 
SELECT i.UNIT_PRICE 
FROM ITEMS i JOIN ORDER_DETAILS od 
ON i.ITEM_ID = od.ITEM_ID 
JOIN ORDERS o 
ON o.ORDER_ID = od.ORDER_ID 
WHERE CUSTOMER_ID = CUSTOMER_ID_IN; 
BEGIN 
    OPEN C1; 
     FETCH C1 INTO UNIT_PRICE_IN; 
     IF C1%FOUND AND C2%FOUND THEN 
     TOTAL_COST_OUT := ORDER_QTY_IN*UNIT_PRICE_IN; 
    END IF; 
    CLOSE C1; 
    CLOSE C2; 
    RETURN TOTAL_COST_OUT; 
END; 
/

现在我已经使用函数编写选择所有的客户,他们已经做过的订单总成本的SELECT语句。

SELECT CUSTOMER_ID, FIND_TOTAL(CUSTOMER_ID) AS TOTAL_COST 
FROM CUSTOMERS; 

但我做到这一点时,我得到一个错误:

ORA-01001: invalid cursor 
ORA-06512: at "TUG81959.FIND_TOTAL", line 22 
01001. 00000 - "invalid cursor" 
*Cause:  
*Action: 

这里是我的表的情况下,列表是有帮助: enter image description here

我想你前人的精力打开和fecth C2在引用C2%FOUND之前的光标。

让我知道。

Regards,

+0

你说得对,我完全跳过了C2光标。这只是其中一个直到有人为你指出它才能看到的错误。谢谢! – pyuntae