如何在postgresql 中使用plpgsql函数返回表格记录集
2008-07-06 22:17
399 查看
近来在一个project中用到了pg(postgresql),客户需要很多表格,有些是典型的中国式报表(接触过的人都知道非常的复杂),所以分了两种方法解决:一、不需要用参数控制数据的,用view;二、需要用参数控制数据的用function; 第一类比较简单,只要会sql就可以解决;第二类中,最复杂的是要进行数据处理的,(比如每页加入小计,最后要有合计的),查了一下资料,在8.3中有两种方法可以解决这个问题,现总结如下: 一、使用returen next 例子如下:
二、使用return query(8.3中的新方法,据说性能要比上面的好)
有人说“一图胜千言”,个人习惯,宁愿别人给我例子,也不要一大堆理论的说教,所以只给出例子。如果你会写plpgsql函数,只需要把--注释的地方换成你需要的处理语句就行了,我就不再啰嗦了 ^_^;如果不懂,要么自己学习一下函数的写法,要么等我什么时候写写pg的函数用法(如果有需要强烈的话^_^)
ps:为了实际运行上面的代码你需要先运行下面的代码: create table tbl(col1 int,col2 text); INSERT INTO tbl VALUES (1,'AAA'); INSERT INTO tbl VALUES (2, 'BBB');
CREATE OR REPLACE FUNCTION fun1() RETURNS SETOF tbl AS $ DECLARE r tbl%rowtype; BEGIN FOR r IN SELECT * FROM tbl LOOP -- 进行处理 RETURN NEXT r; -- 返回当前选中的行 END LOOP; RETURN; END $ LANGUAGE 'plpgsql' ; SELECT * FROM fun1();
二、使用return query(8.3中的新方法,据说性能要比上面的好)
CREATE OR REPLACE FUNCTION fun2() RETURNS SETOF tbl AS $ BEGIN --数据处理 return query SELECT * FROM tbl; END $ LANGUAGE 'plpgsql' ; SELECT * FROM fun2();
有人说“一图胜千言”,个人习惯,宁愿别人给我例子,也不要一大堆理论的说教,所以只给出例子。如果你会写plpgsql函数,只需要把--注释的地方换成你需要的处理语句就行了,我就不再啰嗦了 ^_^;如果不懂,要么自己学习一下函数的写法,要么等我什么时候写写pg的函数用法(如果有需要强烈的话^_^)
ps:为了实际运行上面的代码你需要先运行下面的代码: create table tbl(col1 int,col2 text); INSERT INTO tbl VALUES (1,'AAA'); INSERT INTO tbl VALUES (2, 'BBB');
相关文章推荐
- MyBatis使用MySQL数据库如何在执行insert操作后返回自增的主键
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- matlab中contour函数的返回值contour matrix C如何使用
- ABAP--如何在'REUSE_ALV_GRID_DISPLAY'使用自定义F4帮助,返回多个字段以及计算修改其他字段
- 如何在Vue项目中使用Mockjs,模拟接口返回的数据,实现前后端分离独立开发
- iphone开发之表格组件UITableView的使用(二)如何分组展示数据并添加组头和组尾描述
- 【git 使用】git 如何撤销 commit ,返回到未 commit 状态
- Excel设置表格样式的显示效果使用excel如何改变表格样式
- GridView那点事之【如何使用DataView来绑定数据显示到表格中】
- 如何使用EasyUI显示表格界面
- 如何在SQL Server中使用随机记录集
- 如何使用lucene.net,建立索引,索引目录,查询返回结果
- 使用angularjs、ionic框架如何实现返回上一页并刷新
- Postgresql中新建表的时候,如何使用主键使用序列(sequence)的值进行自增长
- 使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?
- 如何使用js在页面中绘制表格
- 在存储过程中如何使用另一个存储过程返回的结果集
- 如何使用html创建表格
- 使用spring webflow,在前台页面中如何显示后端返回的错误信息
- postgreSQL中函数json_populate_recordset的参数null::myrowtype如何使用