Plsql 如何在PL/SQL中使用带递减的WHILE循环

Plsql 如何在PL/SQL中使用带递减的WHILE循环,plsql,Plsql,我一直在努力做很多关于这个问题的研究,我需要为一门课做些什么,但是我运气不太好。我找不到好的例子。我是一个榜样 创建一个PL/SQL块,该块使用WHILE循环结构为捐赠者的认捐生成付款计划,该认捐将以相等的增量按月支付。该区块的可用值为开始付款到期日、每月付款金额和抵押的每月总付款数。生成的列表应显示每个月付款的一行,显示付款编号、到期日期、付款金额和捐赠余额(所欠质押的剩余金额) 不要在每行输出上显示捐赠余额,而是显示迄今为止支付的总额 经过一些考虑,很明显,支付必须按月递减,直到余额为零,循

我一直在努力做很多关于这个问题的研究,我需要为一门课做些什么,但是我运气不太好。我找不到好的例子。我是一个榜样

创建一个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 

在那之后,我就迷路了

要终止循环,请使用
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;
声明
lv_paymentnumber_num number(3,0):=0;
lv_paymentamount_num编号(4,2);
付款日期付款日期付款日期;
lv数量PaidTodate数量(4,2);
lv_平衡器编号(4,2);
lv_nextduedate_日期;
支付号码;
开始
环
N支付:=最低(lv\U支付金额金额金额、lv\U平衡器收入金额);
lv_BalanceRemain_num:=lv_BalanceRemain_num-支付;
lv_amountpaidtodate_num:=lv_amountpaidtodate_num+支付;
lv_paymentnumber_num:=lv_paymentnumber_num+1;
dbms|u output.put|u行('Payment='| | nPayment)||
“剩余余额”||
lv_平衡器编号);

如果lv_balanceremaining_num,您是否不确定如何构建一个循环,该循环在余额为零时退出?错误报告-ORA-06550:第12行第5列:PLS-00103:在预期以下情况之一时遇到符号“lv_balanceremaining_num”:。(*%&=-+;at in是mod rement而不是rem,或者!=或者~=>=循环中的第一行没有以“;”结尾,有人可能会说,当lv_balancemaining_num时,
退出