CREATE OR REPLACE FUNCTION discount(p_oder_id IN NUMBER) RETURN NUMBER IS dis_money NUMBER := 0; money number :=0; BEGIN money:=(SELECT oder_money FROM view_oder_vip WHERE oder_id=p_oder_id); if money>=100 and money<200 then discount:=10; elsif money>=200 and money<300 then discount:=30; elsif money>=300 and money<400 then discount:=50; elsif money>=400 and money<500 then discount:=70; elsif money>=500 then discount:=0.2*money; else discount:=0.05*money; end if; RETURN discount; END; /
时间: 2024-03-14 09:50:07 浏览: 20
这是一段 PL/SQL 语言编写的函数,功能是根据订单金额返回一个折扣金额。函数的参数是订单号,返回值是一个数字类型的折扣金额。函数的实现逻辑是,根据订单金额的大小,判断应该享受多少折扣,并将折扣金额返回。如果订单金额小于 100,则享受 5% 的折扣;如果订单金额在 100 到 200 之间,则享受 10% 的折扣;如果订单金额在 200 到 300 之间,则享受 30% 的折扣;如果订单金额在 300 到 400 之间,则享受 50% 的折扣;如果订单金额在 400 到 500 之间,则享受 70% 的折扣;如果订单金额大于等于 500,则享受订单金额的 20% 的折扣。
相关问题
CREATE OR REPLACE FUNCTION money_of_order1 (p_sit_where IN NUMBER) RETURN NUMBER IS total_money NUMBER := 0; BEGIN FOR row IN (SELECT food_number, food_price_initial FROM view_oder WHERE sit_where = p_sit_where) LOOP total_money := (row.food_number * row.food_price_initial) + total_money; END LOOP; RETURN total_money; END; / CREATE OR REPLACE procedure s_money(sit_where in number) is sit_number NUMBER := 1; money NUMBER := 0; BEGIN FOR row IN (SELECT sit_where FROM view_oder WHERE sit_where = sit_number) LOOP money := money_of_order1(row.sit_where); UPDATE m_oder SET oder_money = money WHERE sit_where = row.sit_where; sit_number := sit_number + 1; END LOOP; END; / declare begin for row in (select sit_where from m_oder) loop s_money(row.sit_where); end loop; end; /
这段代码是什么意思?
这段代码是一个 Oracle 数据库中的存储过程和函数,用于计算餐厅点餐的总金额。其中,函数 money_of_order1 用于计算某个桌位点餐的总金额,而存储过程 s_money 则用于遍历所有桌位并更新订单表中对应桌位的总金额。最后的 declare begin/end 则是用于调用 s_money 存储过程的代码。
SELECT oder_money into money FROM view_oder_vip WHERE oder_id=p_oder_id;4
是的,你可以使用 `SELECT INTO` 语句来将查询结果赋值给变量。这个语句的作用是从 `view_oder_vip` 视图中查询到 `oder_id` 等于 `p_oder_id` 的记录,并将 `oder_money` 的值赋给变量 `money`。这个语句可以替代原来的 `money:=(SELECT oder_money FROM view_oder_vip WHERE oder_id=p_oder_id);` 语句。完整的代码如下:
```
CREATE OR REPLACE FUNCTION discount(p_oder_id IN NUMBER) RETURN NUMBER IS
dis_money NUMBER := 0;
money NUMBER :=0;
BEGIN
SELECT oder_money INTO money FROM view_oder_vip WHERE oder_id=p_oder_id;
if money>=100 and money<200 then
discount:=10;
elsif money>=200 and money<300 then
discount:=30;
elsif money>=300 and money<400 then
discount:=50;
elsif money>=400 and money<500 then
discount:=70;
elsif money>=500 then
discount:=0.2*money;
else
discount:=0.05*money;
end if;
DBMS_OUTPUT.PUT_LINE('订单金额为:' || money);
DBMS_OUTPUT.PUT_LINE('折扣金额为:' || discount);
RETURN discount;
END; /
```
执行该函数后,会在输出窗口中先输出订单金额,然后输出折扣金额。