postgresql 函数&存储过程 ; 递归查询
函数:http://my.oschina.net/Kenyon/blog/108303
紧接上述,补充一下:
输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回)
create or replace function f_dept_salary_out2(int, out o_dept text,out o_salary text)
returns setof record as
$$
declare
v_rec record;
begin
for v_rec in EXECUTE 'select departmentid as dept_id, sum(salary) as total_salary from f_get_employee() group by departmentid having departmentid='||$1 loop
o_dept:=v_rec.dept_id;
o_salary:=v_rec.total_salary;
return next;
end loop;
end;
$$
language plpgsql; select * from f_dept_salary_out2(2);
递归查询:http://my.oschina.net/kenshiro/blog/160129
由于资源页的数据源没有,因此在这里重新做了个demo,如下:
1. 准备数据
create table Tag(
id int,
name text,
parent_id int
); insert into Tag values(1,'all products',-1),(2,'plastic',1),(3,'metal',1),(4,'toy',2),(5,'furniture',2),(6,'knife',3);
这是一个产品的tag表。如下:

树形描述如下:
all products --------plastic--------toy
| |--furniture
|---metal --------knife
2. 找子孙
即:根据某个节点寻找子树。
例如:找到plastic及下面所有的tag,sql如下:
with recursive r as(
select * from Tag where id = 2
union all
select Tag.* from Tag, r where Tag.parent_id = r.id
) select * from r order by id;
输出会如下:
id name parent_id
2 plastic 1
4 toy 2
4 furniture 2
3. 找祖先
即:根据某个节点寻找其所有父系节点。
例如:找到knife的所有父辈们,sql如下:
with recursive r as (
select * from Tag where id = 6
union all
select Tag.* from Tag, r where Tag.id = r.parent_id
)
select * from r order by id desc;
输出会如下:
id name parent_id
6 knife 3
3 metal 1
1 all products -1
后记:把r理解成下"当前"记录就好了。
postgresql 函数&存储过程 ; 递归查询的更多相关文章
- PostgreSQL函数(存储过程)----笔记
PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程 ...
- PostgreSQL函数如何返回数据集 [转]
PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...
- postgresql 函数 参数为复合类型
postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...
- 用PL/pgSQL写postgreSQL的存储过程[转]
http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...
- mysqldump导出--数据+结构+(函数+存储过程)
#导出某个数据库--结构+数据shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt db_name |gzip -9 > /db_ ...
- PostgreSQL自学笔记:6 PostgreSQL函数
6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...
- Java -- JDBC 学习--调用函数&存储过程
调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...
- 用Python写了一个postgresql函数,感觉很爽
用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...
- postgresql 函数返回结果集(zz)
pgsql function 系列之一:返回结果集--------------------------------------------------------------------------- ...
随机推荐
- 通过KUDU获取Azure网站的日志
部署到Azure上的website,由于无法通过RDP的方式去登录查看log,所以我们只能通过FTP的方式或者kudu的方式进行查看,具体如下: 1.使用FTP账户和密码登录网站的KUDU界面: 如您 ...
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...
- DIV CSS 网页兼容全搞定 (IE6 IE7 IE8 IE9 火狐 谷歌)
CSS兼容常用技巧 请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middl ...
- html5 摄像头的调用
<!DOCTYPE html> <html> <head> <title>摄像头调用</title> <meta name=" ...
- Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
git pull的时候遇到 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y 于 ...
- 用HTML/JS/PHP方式实现页面延时跳转
WEB开发中经常会遇到页面跳转或延时跳转的需求,掌握各种页面跳转方式非常必要. 以下是我总结有用HTML/JS/PHP三类方式实现跳转的方法,例子皆为三秒后跳转到index.php 页面. 1,HTM ...
- 弹出框二 之 bootbox.js
1.可以通过Nuget下载 2.引入 jquery bootstrap bootbox.js 3.使用 $(function () { //bootbox.alert("确认删除" ...
- 父容器的flowover:hidden 必须配合父容器的宽高height width才能生效
有时候 给父容器 加上了 flowover:hidden 这个css后, 其中的子元素为什么仍然会跑出来? 解决的根本方法就是要给 父容器 加上具体的一个宽度, 或高度. (而这个宽度和高度, 其实你 ...
- Junit初级编码(二)探索JUnit核心
序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.现在就让我们慢慢学习Junit单元测试框架 一.Junit的三个核心概念测试类.测试集.测试运行器 1 测试类 公共的, ...
- 关于Html编码问题,例如字符:·
我写的WCF服务突然报错了... 然后我发现传过来的字符不完整 {"完整":"尼古拉·奥斯特洛夫斯基的信息"} 然后传过来的是:{"完整": ...