postgresql 使用存储过程,拼接多张表,查询数据
postgresql 使用存储过程,拼接多张表,查询数据
·
在使用过程中,由于数据随年份的变化数据会发生变化 ,现在需要每次统计时将数据汇总统计。
表名结构如下:
- unionall_table_2021
- unionall_table_2022
- unionall_table_2020
1. 将每年的数据显示union all
拼接
create view vw_unionall_table
as
select * from unionall_table_2020
union all
select * from unionall_table_2021
union all
select * from unionall_table_2022
2. 使用存储过程,动态构建查询
CREATE OR REPLACE FUNCTION get_unionall_table()
RETURNS TABLE("objectid" int4, "f_tbbh" varchar, "f_dlbm" varchar, "f_area" numeric, "f_xzqdm" varchar, "f_year" int4) AS $BODY$
DECLARE
sqlSearch TEXT DEFAULT '';
rec_data RECORD;
cur_data REFCURSOR;
cur_tablename TEXT;
BEGIN-- Open the cursor
OPEN cur_data FOR SELECT
tablename
FROM
pg_tables
WHERE
tablename LIKE'unionall_table_%'
AND LENGTH ( tablename ) = LENGTH ( 'unionall_table_xxxx' );
FETCH cur_data INTO rec_data;
while
FOUND
LOOP-- fetch row into the film
cur_tablename := rec_data.tablename;
FETCH NEXT
FROM
cur_data INTO rec_data;
sqlSearch := sqlSearch || ' select objectid, f_tbbh,f_dlbm,f_area,f_xzqdm,f_year from ' || cur_tablename || ' union all ';
END LOOP;
-- Close the cursor
CLOSE cur_data;
sqlSearch := substr( sqlSearch, 1, "length" ( sqlSearch ) - LENGTH ( 'union all ' ) );
RETURN query EXECUTE sqlSearch;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000
create view vw_unionall_table
as
select get_unionall_table();

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)