CREATE OR REPLACE FUNCTION FUNC_CUSTOMER_QTY( P_CUSTOMER_ID customers.customer_id%TYPE ) RETURN books.retail%TYPE AS V_QTY books.retail%TYPE; BEGIN SELECT books.retail*orderitem.quantity INTO V_QTY FROM BOOKS,ORDERITEM,ORDERS WHERE books.isbn=orderitem.isbn AND orders.customer_id=P_CUSTOMER_ID AND orders.order_id=orderitem.order_id ; RETURN V_QTY; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('THE CUSTOMER_ID IS INVALID!'); END; --函数调用 DECLARE V_QTY books.retail%TYPE; V_ID customers.customer_id%TYPE; BEGIN V_ID :=2; V_QTY :=FUNC_CUSTOMER_QTY(V_ID); dbms_output.put_line('客户号为'||V_ID||'的客户订购图书价格总额为'||V_QTY); END;
时间: 2024-03-07 07:53:31 浏览: 82
这是一个名为 FUNC_CUSTOMER_QTY 的 PL/SQL 函数,它接受一个客户ID作为参数,并返回该客户订购图书的总金额(retail列的值)。该函数使用了一个 SELECT 语句,连接了 BOOKS、ORDERITEM 和 ORDERS 表,根据提供的客户ID查询该客户订购的所有图书,计算出他们的总价,并将结果存储在 V_QTY 变量中。如果没有找到数据,则会抛出一个 NO_DATA_FOUND 异常,并输出“THE CUSTOMER_ID IS INVALID!”。在函数的最后,将 V_QTY 变量作为函数的返回值。
函数的调用代码在函数之后。它声明了两个变量 V_QTY 和 V_ID。然后,将 V_ID 设置为 2,并通过调用 FUNC_CUSTOMER_QTY 函数来计算客户ID为 2 的客户订购图书的总金额。最后,使用 DBMS_OUTPUT.PUT_LINE 函数输出结果到控制台。
阅读全文