2017-10-22 155 views
0

私は、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

答えて

1

私はあなたが開いたとC2 fecth sould考えますカーソルを参照してC2%FOUNDを参照してください。

私に知らせてください。

よろしくお願いします。

+0

私はC2カーソルを完全にスキップしました。それは誰かがあなたのためにそれを指摘するまであなたがそれを見ることができないそれらの間違いの一つです。ありがとう! – pyuntae

関連する問題