2017-03-05 72 views
0

此函數用於返回購物者使用其ID的訂單總數。每次我嘗試拋出一個異常時,都沒有任何反應。它會返回一個空值。例如,IDSHOPPER = 19在BB_BASKET中不存在,所以我認爲如果lv_total_orders = 0,我可以拋出一個異常,但它仍然返回一個空值,並且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。 在你的代碼,返回語句之前:

if lv_total_orders is null then 
    raise_application_error(-20200, 'No data found for given ShopperID, ShopperID: ' || p_shopper); 
    end if;