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