每次基金发分红公告,都需要将分红信息录入到后台的一张数据表中,该表用于计算周/月/半年等周期的涨跌幅。涉及5个日期字段,其中一个还要判断T-1(工作日)。若手工编写sql语句,很容易弄昏头(已经被折磨快半年了)。为了缩减工作量,都快打算写个前台处理程序啥的,不过转念一想,这样工作量会比较大比较耗时,此外,也只是偶尔使用一下,意义不大。后来就想用到用PL/SQL的变量来解决,试了一下还支持中文变量名,挺好用。希望这一招对后台数据维护人员有所帮助。
--
registerdate 权益登记日
-- lastnavdate 前一净值日期(新净值日期的前一个工作日)
-- newnavdate 新净值日期(即除息日)
-- distributedate 红利发放日
-- reinvestdate 再投资日
-- 根据公告中的日期,生成录入脚本,避免手工写脚本
SELECT ' insert into ta_profitschema(fundcode, registerdate, lastnavdate, newnavdate, unitprofit, distributedate, reinvestdate)
VALUES( '' &基金代码 '' , '' &权益登记日 '' , ''' ||
( SELECT MAX (d_date) FROM topenday WHERE l_workflag = ' 1 ' AND d_date < ' &除息日 ' ) ||
''' , '' &除息日 '' , &单位分红, '' &红利发放日 '' , '' &红利发放日 '' ) '
FROM dual;
-- lastnavdate 前一净值日期(新净值日期的前一个工作日)
-- newnavdate 新净值日期(即除息日)
-- distributedate 红利发放日
-- reinvestdate 再投资日
-- 根据公告中的日期,生成录入脚本,避免手工写脚本
SELECT ' insert into ta_profitschema(fundcode, registerdate, lastnavdate, newnavdate, unitprofit, distributedate, reinvestdate)
VALUES( '' &基金代码 '' , '' &权益登记日 '' , ''' ||
( SELECT MAX (d_date) FROM topenday WHERE l_workflag = ' 1 ' AND d_date < ' &除息日 ' ) ||
''' , '' &除息日 '' , &单位分红, '' &红利发放日 '' , '' &红利发放日 '' ) '
FROM dual;
insert into ta_profitschema(fundcode, registerdate, lastnavdate, newnavdate, unitprofit, distributedate, reinvestdate)
VALUES('070002', '2008-05-08', '2008-05-07', '2008-05-08', 0.2, '2008-05-09', '2008-05-09')
VALUES('070002', '2008-05-08', '2008-05-07', '2008-05-08', 0.2, '2008-05-09', '2008-05-09')
附图:PL/SQL的变量窗口