我一直在尝试对我需要为一个班级做的这个问题做大量研究,但我没有太多运气。 IE,我找不到一个好例子。我是一个榜样的人。
创建一个PL / SQL块,该块使用WHILE循环结构为捐赠者的承诺生成付款计划,该承诺每月以相等的增量支付。可用于该区块的值是开始付款到期日,每月付款金额以及承诺的每月付款总数。生成的列表应显示每月付款的行,显示付款编号,到期日,付款金额和捐赠余额(剩余的质押金额)。
不显示每行输出的捐款余额,而是显示截至当前的总付款额。
经过一番考虑之后,很明显,付款必须按月递减,直到余额为零,循环将退出。但我不确定如何正确地做到这一点。我看过整个互联网,似乎没有任何东西可以帮助我完成pl / sql块,例如明智。
这是我到目前为止所拥有的。
declare
lv_paymentnumber_num number(3,0);
lv_paymentamount_num number(4,2);
lv_datepaymentpaid_date date;
lv_amountpaidtodate_num number(4,2);
lv_balanceremaining_num number(4,2);
lv_nextduedate_date date;
begin
lv_balanceremaining_num :-lv_paymentamount_num - lv_amountpaidtodate_num;
dbms_output.put_line(lv_balanceremaining_num);
loop
之后,那就是我迷路的地方。
答案 0 :(得分:1)
要终止循环,请使用EXIT
语句,如下所示:
declare
lv_paymentnumber_num number(3,0) := 0;
lv_paymentamount_num number(4,2);
lv_datepaymentpaid_date date;
lv_amountpaidtodate_num number(4,2);
lv_balanceremaining_num number(4,2);
lv_nextduedate_date date;
nPayment NUMBER;
begin
loop
nPayment := LEAST(lv_paymentamount_num, lv_balanceremaining_num);
lv_balanceremaining_num := lv_balanceremaining_num - nPayment;
lv_amountpaidtodate_num := lv_amountpaidtodate_num + nPayment;
lv_paymentnumber_num := lv_paymentnumber_num + 1;
dbms_output.put_line('Payment = ' || nPayment ||
' Balance remaining = ' ||
lv_balanceremaining_num);
IF lv_balanceremaining_num <= 0 THEN
EXIT;
END IF;
END LOOP;
END;
根据需要进行修改。
分享并享受。