LOOPS、レコード、コレクションについて学んでいます。私は、1500 ドルの寄付誓約額の支払いスケジュールのために取り組んでいるプログラムを持っています。PL/SQL プログラムは 24 か月の支払いスケジュールを実行し、ID '111' の寄付者の dd_pledge という名前の寄付テーブルから残高を取得し、各支払いの支払い額を表示し、各支払いの前に 24 回の支払いを BALANCE で表示します。ゼロバランスに。以下にテーブル情報を含めましたが、そのテーブルから 1 つの値のみをコレクションに挿入し、それに対して計算を実行しています。これは、支払いの望ましい結果です。
匿名ブロック完了
支払い番号: 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 残高: $.00
プログラムの開始日は「2012 年 10 月 1 日」で、支払い額は 24 回払いで 62.50 です。
このプログラムに RECORD と LOOP を使用していますが、機能していません。
LOOP で PAYMENT BALANCE の繰り返しに GUIDANCE を使用し、MONTH で NOV に 1 か月を追加し、それを全体で使用することもできます。ここで、コレクション パーツをコーディングに追加し、LOOP でそれらの値を呼び出す必要があります。
これは私の更新されたコーディングで、少し単純ですが、LOOP への BALANCE 計算エントリについてはわかりません。また、2012 年 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
以下は、寄付テーブルから LOOP に残高を入力するために使用するテーブル情報です。
TABLE 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