同じ update ステートメントを使用して 2 つの列を更新しようとしていますが、それは可能ですか?
IF V_COUNT = 9 THEN
UPDATE INVOICE
SET INV_DISCOUNT = DISC3 * INV_SUBTOTAL
, INV_TOTAL = INV_SUBTOTAL - INV_DISCOUNT
WHERE INV_ID = I_INV_ID;
DBMS_OUTPUT.PUT_LINE ('YOU QUALIFY FOR A DISCOUNT OF 30%');
問題は、 inv_discountINV_TOTAL
のみが更新されていないことです。
DISC3 = 0.3 IE 30% 割引なので、sub_total に 0.3 を掛けると、それが INV_discount の値になります。
INV_TOTAL = sub_total - 割引
INV_ID|INV_DATETIME |INV_SUBTOTAL|INV_DISCOUNT| INV_TOTAL
----------|------------------------------|------------|------------|-----------
100|14-NOV-12 09.40.06.918000 | $.00| $.00| $.00
101|18-MAR-12 10.03.00.000000 | $.00| $.00| $.00
102|18-MAR-12 10.15.00.000000 | $.00| $.00| $.00
103|18-MAR-12 10.55.00.000000 | $80.00| $8.00| $72.00
104|18-MAR-12 10.38.00.000000 | $.00| $.00| $.00
105|12-JUN-12 15.15.00.000000 | $.00| $.00| $.00
106|06-AUG-12 12.13.00.000000 | $.00| $.00| $.00
107|04-MAY-12 09.15.00.000000 | $.00| $.00| $.00
108|29-NOV-12 13.16.00.000000 | $25.00| $5.00| $22.50
109|18-MAR-12 10.37.00.000000 | $50.00| $15.00| $45.00
108は 25 の 20% であると想定されます。割引額は正しいですが、inv_total は正しくありません。22.50 ドルではなく 20 ドルである必要があります。
109は 50 の 30% であると想定されます。割引額は正しいですが、inv_total は $35 である必要があります。
103は罰金を計算します。これは 10% の割引です