函数: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 函数&存储过程 ; 递归查询的更多相关文章

  1. PostgreSQL函数(存储过程)----笔记

    PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程 ...

  2. PostgreSQL函数如何返回数据集 [转]

    PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...

  3. postgresql 函数 参数为复合类型

    postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...

  4. 用PL/pgSQL写postgreSQL的存储过程[转]

    http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...

  5. mysqldump导出--数据+结构+(函数+存储过程)

    #导出某个数据库--结构+数据shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt db_name |gzip -9 > /db_ ...

  6. PostgreSQL自学笔记:6 PostgreSQL函数

    6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...

  7. Java -- JDBC 学习--调用函数&存储过程

    调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...

  8. 用Python写了一个postgresql函数,感觉很爽

    用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

  9. postgresql 函数返回结果集(zz)

    pgsql function 系列之一:返回结果集--------------------------------------------------------------------------- ...

随机推荐

  1. JSP 入门 HTML嵌套Java脚步 显示时间

    <%@ page import="java.util.Date"%> <%@ page language="java" contentType ...

  2. Ajax与DOM实现动态加载

    阅读目录 DOM如何动态添加节点 Ajax异步请求 Chrome处理本地Ajax异步请求 参考: 首先说下问题背景:想要通过异步请求一个文本文件,然后通过该文件的内容动态创建一个DOM节点添加到网页中 ...

  3. yourphp添加KindEditor编辑器

    <tr> <td align="right">故障描述</td> <script charset="utf-8" sr ...

  4. C#程序

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  5. [MongoDB]增删改查

    摘要 上篇文章学习了mongodb在windows上的安装,以及如何开启mongodb,最后列举了简单的增删改查操作.本篇将继续深入学习一下增删改查. 相关文章 [MongoDB]入门操作 CRUD ...

  6. setTimeout和setInterval的各自使用场景

    默认的 setTimeout 只执行一次, 清除用clearTimeout setInterval 每间隔指定的时间, 就执行一次, 清除用clearInterval 但是, setTimeout也可 ...

  7. [译]git status

    git status git status命令能展示工作目录和stage区的状态. 使用他你能看到那些修改被staged到了, 哪些没有, 哪些文件没有被Git tracked到. git statu ...

  8. SAS学习笔记<一>

    三个周末的SAS课程宣告结束, 总结下来 第一周的统计原理简介 第二周/第三周讲解SAS的基本操作. 总体下来,对自己的知识结构有了一个新的梳理,对比大学时期,某个老师一上来就教我们SAS编程,而未考 ...

  9. Javascript面向对象编程一:基础篇

    该随笔分为以下四部分: Javascript面向对象编程一:基础篇 Javascript面向对象编程二:封装 Javascript面向对象编程三:继承 Javascript面向对象编程四:控件 先弄个 ...

  10. ajax浅析---ScriptManagerProxy

    使用ScriptManagerProxy控件 在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和C ...