2017-03-05 3 views
0

この機能は、IDを使用して買い物客の注文総数を返すために使用されます。例外をスローしようとするたびに何も起こりません。それはヌル値を返します。たとえば、IDSHOPPER = 19はBB_BASKET内に存在しないため、lv_total_orders = 0の場合は例外をスローできると考えていましたが、まだNULL値を返していて、DBMS_OUTPUT.PUT_LINEは出力に何も表示しませんでした。 BB_BASAKETに存在しないIDSHOPPERを使用する場合、誰もこの関数の例外をスローする方法を提案できますか?これは私のクラスの宿題ですが、私は必要とされる例外を除いてほとんどの作業を行っています。私は例外を実行する方法を示唆するものは何も見つかりません。PL/SQLでこの関数にEXCEPTIONを追加できますか?

CREATE OR REPLACE FUNCTION NUM_PURCH_SF 
    (p_shopper IN NUMBER) 
RETURN NUMBER 
AS 
lv_total_orders NUMBER(3); 
BEGIN 
    SELECT SUM(ORDERPLACED) 
    INTO lv_total_orders 
    FROM BB_BASKET 
    WHERE IDSHOPPER = p_shopper 
    AND ORDERPLACED = 1; 
RETURN lv_total_orders; 
END; 


SELECT NUM_PURCH_SF(IDSHOPPER) 
    FROM BB_SHOPPER 
    WHERE IDSHOPPER = 23; 
+1

(https://docs.oracle.com/database/122/LNPLS/plsql-error-handling.htm#LNPLS00705)[明示的に例外を上げます] – miracle173

答えて

1

集計関数は、条件に一致する行がなくても常に単一の行を返します。あなたが見ることができますthis article

したがって、例外をスローする場合は、raising exceptions explicitlyを使用することができます。 return文の前に、あなたのコードで 、:

if lv_total_orders is null then 
    raise_application_error(-20200, 'No data found for given ShopperID, ShopperID: ' || p_shopper); 
    end if; 
関連する問題