首页 / 数据库 / MySQL / 数据处理之PostgreSQL过程语言学习
前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市。发现使用PostgreSQL过程语言可以大大加快自己处理数据的效率,下面就举个例子吧!相信大家看了后,也会喜欢上PostgreSQL过程语言的.......首先给出一段SQL脚本,该SQL查询2015年9月10日的欠费数据:SELECT DISTINCT
A.DAY_ID 统计日期
,A.CHANNEL_NAME 支局名称
,A.OWE_MONTH 欠费账期
,SUM(B.current_charge) 日回收
FROM 表1 A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID
WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=20150910 AND A.OWE_MONTH =201508 AND B.ACCT_MONTH=201508
GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH虽然这个脚本可以提取一天的欠费数据,那么问题来了,如果你要提取9月1日到10的欠费数据,那不是要执行这个脚本十次么?当然这里有更好的方法来提取欠费数据,那就是将该段SQL脚本写成PostgreSQL过程语言,然后只需要执行自定义的函数就可以提取十天的欠费数据了,这样大大的提高了自己的工作效率。最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):函数名wx_qf_hdb(统计日期, 01508); 格式: wx_qf_hdb(20150901, 201508);
功能:提取目前欠费帐龄截止统计日期的各支局欠费回收总数
*/
--start
CREATE FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric) RETURNS TEXT AS $$
DECLARE
LS_SQL VARCHAR(5000);
today VARCHAR(8);
qf_month VARCHAR(6);
month_l INTEGER;
num numeric;
BEGIN
today := TRIM(to_char(day_id,99999999));--截止日期转为字符串
qf_month := TRIM(to_char(acct_month,999999));--欠费月份转为字符串
num := to_number(substr(today,1,6),999999);--区字符串的前6位
month_l := to_date(to_char(day_id+1,"9999-99-99"),"yyyy-mm-dd")-to_date(to_char(num,"9999-99")||"-01","yyyy-mm-dd");--计算当月天数
FOR i IN 1..month_l LOOP
LS_SQL := "create table temp_wuxi_qf"||i||" as
SELECT DISTINCT
A.DAY_ID 统计日期
,A.CHANNEL_NAME 支局名称
,A.OWE_MONTH 欠费账期
,SUM(B.current_charge) 日回收
FROM 表1A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID
WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID="||to_char(day_id-month_l+i,99999999)||" AND A.OWE_MONTH ="||qf_month||" AND B.ACCT_MONTH="||qf_month||"
GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH";
EXECUTE LS_SQL;
END LOOP;
--提取日数据
LS_SQL := "create table temp_wuxi_qf"||qf_month||" as ";
FOR i IN 1..month_l LOOP
LS_SQL := LS_SQL||"SELECT * FROM temp_wuxi_qf"||i||" UNION ";
END LOOP;
LS_SQL := LS_SQL||"SELECT * FROM temp_wuxi_qf"||month_l;
EXECUTE LS_SQL;
--汇总日数据
FOR i IN 1..month_l LOOP
LS_SQL:="DROP TABLE temp_wuxi_qf"||i;
EXECUTE LS_SQL;
END LOOP;
--删除所有临时表
RETURN LS_SQL;
END;
$$ LANGUAGE plpgsql;
--end
select wx_qf_hdb(20150903,201508); --运行函数wx_qf_hdb(统计日期,欠费帐期)
DROP FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric); --删除函数
select * from temp_wuxi_qf欠费帐期;--查询表
drop table temp_wuxi_qf欠费帐期; -- 删除表PostgreSQL API文件下载------------------------------------------分割线------------------------------------------免费下载地址在 http://linux.linuxidc.com/用户名与密码都是www.linuxidc.com具体下载目录在 /2015年资料/10月/26日/数据处理之PostgreSQL过程语言学习/下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm------------------------------------------分割线------------------------------------------有兴趣的朋友可以自己试着去研究下PostgreSQL过程语言函数,真的对长期从事提取数据的朋友们帮助很大。------------------------------------华丽丽的分割线------------------------------------CentOS 6.3环境下yum安装PostgreSQL 9.3 http://www.linuxidc.com/Linux/2014-05/101787.htmPostgreSQL缓存详述 http://www.linuxidc.com/Linux/2013-07/87778.htmWindows平台编译 PostgreSQL http://www.linuxidc.com/Linux/2013-05/85114.htmUbuntu下LAPP(Linux+Apache+PostgreSQL+PHP)环境的配置与安装 http://www.linuxidc.com/Linux/2013-04/83564.htmUbuntu上的phppgAdmin安装及配置 http://www.linuxidc.com/Linux/2011-08/40520.htmCentOS平台下安装PostgreSQL9.3 http://www.linuxidc.com/Linux/2014-05/101723.htmPostgreSQL配置Streaming Replication集群 http://www.linuxidc.com/Linux/2014-05/101724.htm如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin http://www.linuxidc.com/Linux/2014-12/110108.htm------------------------------------华丽丽的分割线------------------------------------PostgreSQL 的详细介绍:请点这里
PostgreSQL 的下载地址:请点这里本文永久更新链接地址