方法1
create type deptSon as (
mid varchar(36),
id varchar(36),
name varchar(200),
DeptParentId varchar(36)
); CREATE OR REPLACE FUNCTION function2 ()
RETURNS SETOF deptSon AS
$body$
SELECT id,id,name,parentId from dept where id='73684883-5F9C-44F3-8DAF-0037AB304A82'
union all
SELECT id,id,name,parentId from dept where id='73684883-5F9C-44F3-8DAF-0037AB304A82';
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; exampledb=>
exampledb=> select function2 () ;
function2
----------------------------------------------------------------------------------------------------------------------------------
(73684883-5F9C-44F3-8DAF-0037AB304A82,73684883-5F9C-44F3-8DAF-0037AB304A82,人事行政部,04009320-7B51-4A6B-84E6-4BFDD4E9066A)
...
(73684883-5F9C-44F3-8DAF-0037AB304A82,73684883-5F9C-44F3-8DAF-0037AB304A82,人事行政部,04009320-7B51-4A6B-84E6-4BFDD4E9066A)
(2 rows) exampledb=>
exampledb=> select * from function2 () ;
mid |id |name | deptparentid
--------------------------------------+--------------------------------------+-----------------+--------------------------------------
73684883-5F9C-44F3-8DAF-0037AB304A82 | 73684883-5F9C-44F3-8DAF-0037AB304A82 | 人事行政部 | 04009320-7B51-4A6B-84E6-4BFDD4E9066A
...
73684883-5F9C-44F3-8DAF-0037AB304A82 | 73684883-5F9C-44F3-8DAF-0037AB304A82 | 人事行政部 | 04009320-7B51-4A6B-84E6-4BFDD4E9066A
(2 rows)
方法2
CREATE OR REPLACE FUNCTION GetSonDeptListById (varchar(36))
RETURNS SETOF deptSon AS
$body$
WITH RECURSIVE deptSon (mid,id,name,parentId) AS (
SELECT id as mid,id,name,parentId From Dept Where (id = $1) or ($1 is null)
UNION ALL
Select cte.mid,d.id,d.name,d.parentId from Dept d
Inner Join deptSon cte on cte.id=d.parentId
)select * from deptSon
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; CREATE OR REPLACE FUNCTION GetSonDeptListById () --设置默认值*
RETURNS SETOF deptSon AS
$body$
select * from GetSonDeptListById(null);
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; exampledb=> select * from GetSonDeptListById('04009320-7B51-4A6B-84E6-4BFDD4E9066A');
mid | id | name | deptparentid
--------------------------------------+--------------------------------------+-----------------------+--------------------------------------
04009320-7B51-4A6B-84E6-4BFDD4E9066A | 04009320-7B51-4A6B-84E6-4BFDD4E9066A | 广州 | 00000000-0000-0000-0000-000000000000
...
04009320-7B51-4A6B-84E6-4BFDD4E9066A | 79FAD805-5B0F-4C45-B30B-D3CF86275978 | 天河 | E68F40DA-A88D-492A-9265-2A60678C8DC4
(10 rows)
方法3
CREATE OR REPLACE FUNCTION execute(filter varchar(36))
RETURNS TABLE (id varchar(36), name varchar(200))
AS $$
BEGIN
RETURN QUERY EXECUTE 'SELECT id,name FROM dept where id = $1;' USING filter;
END;
$$ LANGUAGE PLPGSQL;
CREATE OR REPLACE FUNCTION execute(filter varchar(36),filter2 varchar(36))
RETURNS TABLE (Aid varchar(36), Aname varchar(200))
AS $$
BEGIN
RETURN QUERY SELECT id,name FROM dept where id = $1 OR id = $2;
END;
$$ LANGUAGE PLPGSQL;

CREATE OR REPLACE FUNCTION execute(filter varchar(36),filter2 varchar(36))
RETURNS TABLE (Aid varchar(36), Aname varchar(200))
AS $$
BEGIN
RETURN QUERY WITH RECURSIVE org AS (SELECT id,name FROM dept where id = $1 OR id = $2) SELECT * FROM org;
END;
$$ LANGUAGE PLPGSQL;
 

PostgreSQL 表值函数的更多相关文章

  1. 表值函数与JS中split()的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

  2. T-SQL编程 —— 用户自定义函数(内嵌表值函数)

    内嵌表值函数 接上 <T-SQL编程 -- 用户自定义函数(标量函数)> http://www.cnblogs.com/viusuangio/p/6212072.html 内嵌表值函数可以 ...

  3. sqlserver中的表值函数和标量值函数

    顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建 ...

  4. Entity Framework 5中应用表值函数进行Linq查询

    Entity Framework 5引入了表值函数(Table-Valued Functions TVFs).表值函数的返回类型是一个Table类型,可用在SQL查询语句中.最简单的表值函数,读取客户 ...

  5. SQL SERVER函数——表值函数的处理

    有些情况可能用下表值函数,表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别),如果函数中没有过多的逻辑处理,如变量的定义,判断等,表值函数返回结果集可以简单向下面这么写: )) ...

  6. 用程序集编写clr表值函数:把正则表达式引入数据库中

    正则表达式非常好,但在数据库中就是没有,但可以通过程序集方式扩展 先编写一个dll,标量函数很好写,表值函数麻烦一点 下面是C#代码 using System; using System.Data; ...

  7. SQL表值函数和标量值函数的区别

    SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...

  8. SQL 表值函数

    表值函数返回的是一张表. 情况:把传入的字符串按指定分隔符转换成数组 理解:把字符串打散,逐个插入表,这个表就是需要的数据 Create Function [dbo].[Split] ( ), ) ) ...

  9. 关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别

    本文出处:http://www.cnblogs.com/wy123/p/6266724.html 最近在学习 WITH RECOMPILE和OPTION(RECOMPILE)在重编译上的区别的时候,无 ...

随机推荐

  1. vue.js响应式原理解析与实现—实现v-model与{{}}指令

    上一节我们已经分析了vue.js是通过Object.defineProperty以及发布订阅模式来进行数据劫持和监听,并且实现了一个简单的demo.今天,我们就基于上一节的代码,来实现一个MVVM类, ...

  2. Go Web:HttpRouter路由

    HttpRouter是一个轻量级但却非常高效的multiplexer.手册: https://godoc.org/github.com/julienschmidt/httprouter https:/ ...

  3. iOS main.m解析

    在iOS开发中,有一个文件main.m,可能并不是很引起开发的注意.不过,可能在面试过程中,面试官还是有些会问到主函数里面到底做了哪些工作和任务.下面我们主要看一下main.m内部的逻辑. #impo ...

  4. [转]MySQL-死锁查询

    本文转自:https://blog.csdn.net/qq105319914/article/details/50562783 1.查询是否锁表 show OPEN TABLES where In_u ...

  5. 博客使用base64编码图片测试

    为了解决发博客时需要先要上传,所以查了一下这个方法 1.把本地图片转为base64编码的字符串, 网上有很多提供这个功能的网站,转换后像这样 data:image/jpeg;base64,/9j/4A ...

  6. 【Java每日一题】20170309

    20170308问题解析请点击今日问题下方的“[Java每日一题]20170309”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  7. 今天给大家补充一下 background 用法

    补充一个知识点 1,浏览器默认字体大小是font-size:16px:谷歌最小字体是10px,其他浏览器是12px 2. 选择器 通配符选择器     *   表示 3.background  背景 ...

  8. java使用POI将数据导出放入Excel

    本文主要是将数据库取出的数据按照自定义的行列格式导出到excel中,POI则是实现我们需求所用到的技术. POI介绍 使用spring boot导入相关依赖 获取数据(自行处理) 完整代码实例:创建e ...

  9. 全面掌握Node命令选项

    全面掌握Node命令选项 译者按:作为Node.js开发者,有必要全面了解一下节点命令的所有选项,这样在关键时刻才能得心应手. 原文:掌握Node.js的CLI和命令行选项 译者:Fundebug 为 ...

  10. GitHub for Windows离线安装包

    国内安装github客户端,真的很痛!! 偶然找到了离线安装包,感谢作者的资源分享!!! 地址:http://download.csdn.net/download/lyg468088/8723039? ...