Plsql 在PL/SQL中可以向该函数添加什么异常?

Plsql 在PL/SQL中可以向该函数添加什么异常?,plsql,oracle11g,Plsql,Oracle11g,此函数用于返回使用购物者ID的购物者的订单总数。每次我尝试抛出异常时,都不会发生任何事情。它将返回一个空值。例如,IDSHAPPER=19不存在于BB_BASKET中,因此我认为如果lv_total_orders=0,我可以抛出一个异常,但它仍然返回空值,DBMS_OUTPUT.PUT_行不会显示输出中的任何内容。如果我要使用BB_BASAKET中不存在的IDSHOPPER,有人能建议如何对此函数抛出异常吗?这是我班的家庭作业,但除了要求的例外,我已经完成了大部分作业。我找不到任何关于如何执行异

此函数用于返回使用购物者ID的购物者的订单总数。每次我尝试抛出异常时,都不会发生任何事情。它将返回一个空值。例如,IDSHAPPER=19不存在于BB_BASKET中,因此我认为如果lv_total_orders=0,我可以抛出一个异常,但它仍然返回空值,DBMS_OUTPUT.PUT_行不会显示输出中的任何内容。如果我要使用BB_BASAKET中不存在的IDSHOPPER,有人能建议如何对此函数抛出异常吗?这是我班的家庭作业,但除了要求的例外,我已经完成了大部分作业。我找不到任何关于如何执行异常的建议

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;

聚合函数始终返回单行,即使没有与条件匹配的行。你可以看看

所以,如果您想抛出异常,可以使用。 在代码中的return语句之前:

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