PostgreSQL定义返回表函数
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),但有两个参数:
- 第一个参数匹配title字段的模式字符串。仍然使用ilike操作执行搜索。
- 第二个参数是file的发行年度。
这两个函数在PostgreSQL中称为重载函数。我们想在返回结果之前处理每一行,使用 FOR LOOP语句进行处理。内部每个迭代中使用UPPER函数是film title 变为大写,仅为了演示而已。
return next语句是增加一行至函数结果集中,不断执行循环,在每次迭代中生成结果集。
下面进行测试:
SELECT*
FROMget_film ('%er', 2006);
总结
现在你应该理解了如何开发返回表的函数,主要使用return query 和 return next 语句。
PostgreSQL定义返回表函数相关推荐
- oracle 返回表的函数,oracle 返回表函数
--首先创建一个类型 create or replace type t_test as object( empno number(4), ename varchar2(20), ...
- 定义返回函数指针(地址)的函数
其实函数指针和普通类型的指针没什么区别,只不过从代码的表现形式上略有差异罢了,回顾一下,下面定义两个在普通不过的"变量",仔细推敲以下他们的区别.(插几句,现在所做的工作虽谈不上是 ...
- 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.时 ...
- 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 ...
- oracle返回表id,在Oracle的函数中,返回表类型的语句
Oracle的function中怎么返回表变量? 太晚了,过多的理论知识就不说了,下面简单地说实现吧!.. 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: 复制 ...
- Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...
- python函数参数定义顺序_Python函数定义-位置参数-返回值
原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...
- mysql 模拟序列_【原创】MySQL 模拟PostgreSQL generate_series 表函数
PostgreSQL 提供了一个很强大的造数据的函数generate_series,基于Common Table Expression. MySQL 没有复杂的应用程序类型,该如何实现这样的功能呢? ...
- python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...
此题比较简单,不做过多说明. 值得注意的是如何用一行代码让用户一次性输入为多个变量赋值 Python # 定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值. def getMax ...
最新文章
- python入门是哪个包_python入门(十):模块、包
- 简单爬虫,查博客浏览量
- SAP物料类型与物料库存信息在哪个表中
- SQL:waitfor的使用
- k8s创建Deployment报错:missing required field “selector“ in io.k8s.api.apps.v1.DeploymentSpec
- 递推——覆盖墙壁(洛谷 P1990)
- 【ABAP系列】SAP ABAP 宏的简单使用
- 不支持的major.minor版本52.0 [重复]
- HDU1591 Encoded Love-letter【密码】
- 怎样设置HTML上传控件,上传文件的大小
- ADB命令行工具使用
- 【堆排序的递归和非递归实现】Java实现
- 文件服务器和ftp服务器的区别
- 创新的原则(《创新与企业家精神》彼得·德鲁克)
- 华为MatePad Pro和华为MatePad区别
- Windows xp 磁盘加密
- db,dbc,dbm
- 关于Unity程序化生成地图的研究(Wave Function Collapse)
- 大连文思海辉php面试题,文思海辉前端面试题
- 2019春季学期总结
热门文章
- PointNetPointNet++源码ModelNetDataLoader理解
- 一九产业AI速写:汽车篇
- SAP Solution Manager安装及配置若干细节和思路
- 如何将AI文件转换为PSD文件
- android studio anim_type is not translated in ar (Arabic), cs (Czech),
- 智能手机的硬件体系结构
- 南大软件分析 前5节笔记
- 办公套件:Quickoffice更新发布1.2版本
- 【亡羊补牢】计算机网络灵魂之问 第10期 tcp是怎么去保证可靠传输的?
- Docker_02_Docker基本命令使用