![3ee07913dd7b6eeb057ad3a77b167841.png](https://i-blog.csdnimg.cn/blog_migrate/aa6c6e5f35097e6facaa8ad4139a80a1.jpeg)
在项目中,有时会动态地按周期(如按月)封存统计数据,通常需要做这样的处理:
以按月封存为例,当月数据到达时,先需要检查该月是否有过记录,有则以更新的方式累加统计数字,无则添加一条记录。
假设我们创建以下月封存表 month_stat,字段 month_name 表示月份,字段 total_count 表示统计数字。
CREATE TABLE month_stat (month_name varchar(6), total_count int, UNIQUE (month_name));
普通处理
假设数据到达,我们用 v_month_name 表示到达数据的月份,v_count 表示本次到达的数量,则通常我们使用以下方式完成月封存数据的记录:
DO $$ DECLARE v_month_name varchar := '201904'; -- 本次数据的月份 v_count int := 3; -- 本次数据相关的数量BEGIN -- 如果月份已经存在,则更新统计,将数量累加上去 IF EXISTS (SELECT 1 FROM month_stat WHERE month_name = v_month_name FOR UPDATE) THEN UPDATE month_st