[英]Program that Returns Change PL/SQL
我正在嘗試創建一個程序,該程序返回20、10、5和1美元鈔票的零錢(所有用戶值和輸入都是整數)。
例如:
exec Change(15, 200);
9 Twenty Dollar Bill
1 Five Dollar Bill
到目前為止,我有:
CREATE or REPLACE Procedure Change(
p_MoneyDue number, p_Paid number
) as
p_Change number := p_MoneyDue - p_Paid;
BEGIN
IF (p_Change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
ELSIF p_MoneyDue > p_Paid THEN
dmbs_output.put_line ('You need to give me more money!');
ELSIF p_Change >= 100 THEN
dbms_output.put_line ('Twenty dollar bill')
ELSIF p_Change <= 100 THEN
dbms_output.put_line ('10 dollar bill')
ELSIF p_Change THEN
dbms_output.put_line ('5 dollar bill')
ELSE p_Change THEN
dbms_output.put_line ('1 dollar bill')
END IF;
END;
/
DECLARE
PROCEDURE CHANGE(
p_moneydue NUMBER,
p_paid NUMBER )
AS
p_change NUMBER := p_paid - p_moneydue;
-- 20 10 5 1
bill_20 NUMBER := 0;
bill_10 NUMBER := 0;
bill_5 NUMBER := 0;
bill_1 NUMBER := 0;
BEGIN
IF (p_change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
elsif p_moneydue > p_paid THEN
dbms_output.put_line ('You need to give me more money!');
END IF;
IF (p_change > 0 ) THEN
bill_20 := TRUNC(p_change / 20);
p_change := p_change - (20 * bill_20);
bill_10 := TRUNC(p_change / 10);
p_change := p_change - (10 * bill_10);
bill_5 := TRUNC(p_change / 5);
p_change := p_change - (5 * bill_5);
bill_1 := p_change;
IF(bill_20 > 0) THEN
dbms_output.put_line(bill_20 ||' Twenty Dollar Bill');
END IF;
IF(bill_10 > 0) THEN
dbms_output.put_line(bill_10 ||' Ten Dollar Bill');
END IF;
IF(bill_5 > 0) THEN
dbms_output.put_line(bill_5 ||' Five Dollar Bill');
END IF;
IF(bill_1 > 0) THEN
dbms_output.put_line(bill_1 ||' One Dollar Bill');
END IF;
END IF;
END;
BEGIN
CHANGE( 15, 200);
END;
/
您在代碼中犯了很多錯誤。 您是否嘗試過編譯? 正確的程序如下所示
create or replace Procedure Change(
p_MoneyDue number, p_Paid number
) as
p_Change number := p_Paid - p_MoneyDue;
p_twenty number := 0;
p_ten number := 0;
p_five number := 0;
p_one number := 0;
BEGIN
IF (p_Change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
ELSIF p_MoneyDue > p_Paid THEN
dbms_output.put_line ('You need to give me more money!');
END IF;
WHILE p_change > 0
LOOP
IF p_Change >= 20 THEN
p_twenty := p_twenty + 1;
p_Change := p_Change - 20;
ELSIF p_Change >= 10
THEN
p_ten := p_ten + 1;
p_Change := p_Change - 10;
ELSIF p_Change >= 5 THEN
p_five := p_five + 1;
p_Change := p_Change - 5;
ELSE
p_one := p_one + 1;
p_Change := p_Change - 1;
END IF;
END LOOP;
if p_twenty > 0 then
dbms_output.put_line (p_twenty || ' Twenty Dollar Bill');
END IF;
if p_ten > 0 then
dbms_output.put_line (p_ten || ' Ten Dollar Bill');
END IF;
if p_five > 0 then
dbms_output.put_line (p_five || ' Five Dollar Bill');
END IF;
if p_one > 0 then
dbms_output.put_line (p_one || ' One Dollar Bill');
END IF;
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.