如何在PL / SQL中使用WHILE循环并递减

时间:2015-01-23 20:29:26

标签: plsql

我一直在尝试对我需要为一个班级做的这个问题做大量研究,但我没有太多运气。 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 
之后,那就是我迷路的地方。

1 个答案:

答案 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;

根据需要进行修改。

分享并享受。