我正在学习 LOOPS、记录和集合。我有一个程序,我正在为捐助者承诺金额 1500 美元的付款时间表工作。PL/SQL 程序运行 24 个月的付款计划,从名为 dd_pledge 的捐赠表中检索 ID 为“111”的捐赠者的余额,显示每次付款的付款金额,并显示每次付款后的 24 次付款与 BALANCE到零余额。我已经包含了下面的表格信息,但是,我只是将该表格中的一个值插入到我的集合中,然后对其执行计算。这是付款的预期结果:
匿名块完成
付款编号:1 到期日:2012 年 10 月 1 日上午:62.50 美元 剩余:1,437.50 美元
付款编号:2 到期日期:2012 年 11 月 1 日上午:62.50 美元,其余:1,375.00 美元
... 付款编号:23 到期日期:2014 年 8 月 1 日上午:62.50 美元,剩余时间:62.50 美元
付款编号:24 到期日:2014 年 9 月 1 日上午:62.50 美元,其余:0.00 美元
该计划的开始日期为'01-OCT-2012',付款金额为 62.50,共 24 次付款。
我正在为这个程序使用记录和循环,但它不起作用。
我仍然可以在 LOOP 和 MONTH 中使用一些关于 PAYMENT BALANCE 迭代的指导,仅在 11 月添加 1 个月并在整个过程中使用它。这就是我需要将集合部分添加到我的编码并为 LOOP 调用这些值的地方。
这是我更新的代码,它更简单一些,但不确定 BALANCE 计算输入到 LOOP 中,而且从 12 年 10 月 1 日开始的付款日期只是转到 11 月 1 日并将其用作日期。我还在学习收藏。
SET SERVEROUTPUT ON
DECLARE
payment_num NUMBER(2) := 0;
d_loop_count NUMBER(2) := 24;
due_date DATE;
payment_amt NUMBER(8, 2) := 62.50;
donation_balance NUMBER(8,2);
pledgeamt NUMBER(8,2) := 1500;
---This pledgeamt is not correct, involved in Collection called value from TABLE
start_date DATE := '01-OCT-2012';
BEGIN
/*
SELECT pledgeamt INTO donation_balance
FROM dd_pledge
WHERE idpledge = '111'; --111 has a pledge amount of $1500
*/
FOR i IN 1..d_loop_count
LOOP
payment_num :=payment_num + 1;
due_date := add_months(start_date, 1);
donation_balance := (pledgeamt - payment_amt);
dbms_output.put_line
(
'Pay #: ' || payment_num
|| ' ' || 'Due: ' || due_date
|| ' ' || 'Amt: ' || payment_amt
|| ' ' || 'Bal: '|| donation_balance
);
END LOOP;
END;
/
这是线轴给我的。它正在出现,但需要更多关于 LOOP 迭代和捐赠支付余额的计算以及支付序列的 MONTH 倒计时的帮助。
anonymous block completed
Pay #: 1 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 2 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 3 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 4 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
...Pay #: 20 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 21 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 22 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 23 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
Pay #: 24 Due: 01-NOV-12 Amt: 62.5 Bal: 1437.5
这是我将用于将捐赠表中的余额输入到循环中的表信息。
表 dd_pledge 信息是
IDPLEDGE NUMBER(5,0) No 1
IDDONOR NUMBER(4,0) Yes 2
PLEDGEDATE DATE Yes 3
PLEDGEAMT NUMBER(8,2) Yes 4
IDPROJ NUMBER(5,0) Yes 5
IDSTATUS NUMBER(2,0) Yes 6
WRITEOFF NUMBER(8,2) Yes 7
PAYMONTHS NUMBER(3,0) Yes 8
CAMPAIGN NUMBER(4,0) Yes 9
FIRSTPLEDGE CHAR(1 BYTE) Yes 10
111 ROW equals:
IDPLEDGE IDDONOR PLEDGEDATE PLEDGEAMT
111 306 01-MAR-13 1500
etc...
504 20 0 756 Y
这是关于集合、记录的部分,这是我正在为其他人学习更多关于 PL/SQL COLLECTIONS 的内容。http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CHDBHJEI