PostgreSQL PL/pgSQL For循环生成还款计划日期累加异常求解
问题根因
- 循环内的还款日计算逻辑错误:每次均使用固定的初始
start_date加1个月,没有累计月份增量,因此12次循环得到的还款日均为2021-02-01,不会逐月累加。 - 冗余变量说明:你声明的
due_date变量实际未参与循环内的计算,属于无效变量。
修复后的代码
DO $$ DECLARE start_date DATE := '2021-01-01'; payment_due_date DATE; mon_pay_amt NUMERIC := 10; total_mon_amt NUMERIC := 12; bal_num NUMERIC :=0; BEGIN bal_num := mon_pay_amt * total_mon_amt; payment_due_date := start_date; RAISE NOTICE '12个月总待还款金额: %', to_char(bal_num, '$999.99'); FOR i IN 1..total_mon_amt LOOP bal_num := bal_num - mon_pay_amt; -- 每次在上次还款日基础上加1个月,实现逐月累加 payment_due_date := payment_due_date + INTERVAL '1 MONTH'; RAISE NOTICE '第%期还款:到期日%,还款金额%,剩余待还%', i, payment_due_date, to_char(mon_pay_amt, '$99.99'), to_char(bal_num, '$999.99'); END LOOP; END $$;
逻辑说明
- 初始化时直接将
payment_due_date赋值为起始日期 - 每次循环时,基于上一期的还款日加1个月,保证月份逐期累加
- 移除了未使用的冗余变量
due_date,简化代码结构 - 调整了日志输出格式,可读性更强
内容的提问来源于stack exchange,提问作者Daygo27
相关产品推荐
相关产品推荐

