老师要求写个postgres的存储过程,第一次写存储过程,网上postgres存储过程的资料好少啊,查来查去都是两篇被转来转去,写了2天快崩溃了,还是没写出来,中午老师让写一个详细设计给他看,他又帮我修改了一下,最后终于完成了。
老师说写东西设计要比编码重要,我的思维是乱的,详细设计写不出来再让我写10天也还是写不出来,要学会怎么查。
真的意识到了设计分析的重要性。
不多说,说问题:
要求:value字段为text类型,存储了一些参数,参数中有换行,需要把value的值按换行符拆分出来存入另一张表。
分析:
0.先从pressData表中取得一行数据,获得value, transctionId,
1.将value字段拆分开,用split_part()
2.用循环控制取出value字段拆分内容,并依次存入数组
3.取出数组内容依次拆入convert表中transactionid,s001...s060
insert into tablename values(transactionid,v[0],v[1]...v[59])
拆分函数:
select split_part("Value",'/n',3)
from "pressureData"
order by "ID" desc
limit 1;
存储过程:
split1:
split2:
思路是这样的,在split1(int)中可以将一行中的value拆分出来,当时在split1(int)中写了个嵌套循环,没有实现想要的功能,不知道为什么,所以又写了个split2()来做循环调用split1(int),实验了一下可以成功。
经过多次修改得到最终版
将以上两个函数合并为一个函数并且做到从pressureData表将Value字段拆分出来,然后经过16进制转换(需调用另外一个存储过程16进制转10进制),再经过公式计算,将结果存入
sensorPressure表
16进制转10进制存储过程:
调用存储过程select * from pressureDataToSensorPressure();
另外加一个查询函数:
1.按每个月份统计数据把每月的数据统计出来
终于把项目做完了,告一段落,总结补充一下。
最终的存储过程: