每次基金发分红公告,都需要将分红信息录入到后台的一张数据表中,该表用于计算周/月/半年等周期的涨跌幅。涉及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;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的变量窗口
本文介绍了一种利用PL/SQL变量自动处理基金分红公告的方法,通过编写SQL脚本自动计算关键日期并插入数据库,有效减少了手工录入的工作量。
1549

被折叠的 条评论
为什么被折叠?



