PostgreSQL定义返回表函数

本文我们学习如何在PostgreSQL 开发返回表函数。

示例数据表

我们使用的示例数据库表为film,如下图所示:

示例1

第一个函数发挥所有满足条件film表记录,这里使用ilike操作,和like类似,但不区分大小写:

CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR) RETURNS TABLE (film_title VARCHAR,film_release_year INT
)
AS $$
BEGINRETURN QUERY SELECTtitle,cast( release_year as integer)FROMfilmWHEREtitle ILIKE p_pattern ;
END; $$ LANGUAGE 'plpgsql';

get_film(varchar) 函数接收一个参数,为匹配title字段的模式字符串。

为了从函数中返回表,需要使用return table语法,以及表的字段,每个字段使用逗号分隔。

在函数中,我们返回一个查询(select 语句)作为返回结果。注意select语句中的字段必须和返回表的字段类型一致。因为film表中release_year的数据类型不是integer,所以我们要使用cast函数转换成integer。

下面进行测试该函数:

SELECT*
FROMget_film ('Al%');

我们调用该函数,获取所有title以Al开头的记录:

注意,我们也可以使用下面语句进行调用:

SELECTget_film ('Al%');

PostgreSQL 返回已一列数组形式返回表。

示例2

实际开发中,我们经常需要在返回函数结果集之前处理每一行记录。下面通过示例说明:

CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR,p_year INT) RETURNS TABLE (film_title VARCHAR,film_release_year INT
) AS $$
DECLARE var_r record;
BEGINFOR var_r IN(SELECT  title, release_year FROM film WHERE title ILIKE p_pattern AND release_year = p_year)  LOOPfilm_title := upper(var_r.title) ; film_release_year := var_r.release_year;RETURN NEXT;END LOOP;
END; $$
LANGUAGE 'plpgsql';

该函数与上一个名称一样get_film(varchar,int),但有两个参数:

  1. 第一个参数匹配title字段的模式字符串。仍然使用ilike操作执行搜索。
  2. 第二个参数是file的发行年度。

这两个函数在PostgreSQL中称为重载函数。我们想在返回结果之前处理每一行,使用 FOR LOOP语句进行处理。内部每个迭代中使用UPPER函数是film title 变为大写,仅为了演示而已。

return next语句是增加一行至函数结果集中,不断执行循环,在每次迭代中生成结果集。

下面进行测试:

SELECT*
FROMget_film ('%er', 2006);

总结

现在你应该理解了如何开发返回表的函数,主要使用return query 和 return next 语句。

PostgreSQL定义返回表函数相关推荐

  1. oracle 返回表的函数,oracle 返回表函数

    --首先创建一个类型 create or replace type t_test as object(     empno number(4),     ename varchar2(20),     ...

  2. 定义返回函数指针(地址)的函数

    其实函数指针和普通类型的指针没什么区别,只不过从代码的表现形式上略有差异罢了,回顾一下,下面定义两个在普通不过的"变量",仔细推敲以下他们的区别.(插几句,现在所做的工作虽谈不上是 ...

  3. 1.19.5.3.时态表、关联一张版本表、关联一张普通表、时态表、声明版本表、声明版本视图、声明普通表、时态表函数等

    1.19.5.3.时态表(Temporal Tables) 1.19.5.3.1.设计初衷 1.19.5.3.1.1.关联一张版本表 1.19.5.3.1.2.关联一张普通表 1.19.5.3.2.时 ...

  4. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法

    1.19.5.4.流上的Join 1.19.5.4.1.常规Join 1.19.5.4.2.时间区间Join 1.19.5.4.3.时态表Join 1.19.5.4.4.基于处理时间的时态Join 1 ...

  5. oracle返回表id,在Oracle的函数中,返回表类型的语句

    Oracle的function中怎么返回表变量? 太晚了,过多的理论知识就不说了,下面简单地说实现吧!.. 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: 复制 ...

  6. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  7. python函数参数定义顺序_Python函数定义-位置参数-返回值

    原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...

  8. mysql 模拟序列_【原创】MySQL 模拟PostgreSQL generate_series 表函数

    PostgreSQL 提供了一个很强大的造数据的函数generate_series,基于Common Table Expression. MySQL 没有复杂的应用程序类型,该如何实现这样的功能呢? ...

  9. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...

    此题比较简单,不做过多说明. 值得注意的是如何用一行代码让用户一次性输入为多个变量赋值 Python # 定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值. def getMax ...

最新文章

  1. python入门是哪个包_python入门(十):模块、包
  2. 简单爬虫,查博客浏览量
  3. SAP物料类型与物料库存信息在哪个表中
  4. SQL:waitfor的使用
  5. k8s创建Deployment报错:missing required field “selector“ in io.k8s.api.apps.v1.DeploymentSpec
  6. 递推——覆盖墙壁(洛谷 P1990)
  7. 【ABAP系列】SAP ABAP 宏的简单使用
  8. 不支持的major.minor版本52.0 [重复]
  9. HDU1591 Encoded Love-letter【密码】
  10. 怎样设置HTML上传控件,上传文件的大小
  11. ADB命令行工具使用
  12. 【堆排序的递归和非递归实现】Java实现
  13. 文件服务器和ftp服务器的区别
  14. 创新的原则(《创新与企业家精神》彼得·德鲁克)
  15. 华为MatePad Pro和华为MatePad区别
  16. Windows xp 磁盘加密
  17. db,dbc,dbm
  18. 关于Unity程序化生成地图的研究(Wave Function Collapse)
  19. 大连文思海辉php面试题,文思海辉前端面试题
  20. 2019春季学期总结

热门文章

  1. PointNetPointNet++源码ModelNetDataLoader理解
  2. 一九产业AI速写:汽车篇
  3. SAP Solution Manager安装及配置若干细节和思路
  4. 如何将AI文件转换为PSD文件
  5. android studio anim_type is not translated in ar (Arabic), cs (Czech),
  6. 智能手机的硬件体系结构
  7. 南大软件分析 前5节笔记
  8. 办公套件:Quickoffice更新发布1.2版本
  9. 【亡羊补牢】计算机网络灵魂之问 第10期 tcp是怎么去保证可靠传输的?
  10. Docker_02_Docker基本命令使用