postgresql PL/pgSQL return setof和TABLE的区别
时间:2021-08-29
本文章向大家介绍postgresql PL/pgSQL return setof和TABLE的区别,主要包括postgresql PL/pgSQL return setof和TABLE的区别使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在pg中,广泛的使用了表函数代替视图,返回集合有两种定义,setof和table。他们的区别在于table明确定义了字段名和类型,如下:
CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint, name text) AS $$ SELECT id, name FROM events WHERE type = $1; $$ LANGUAGE SQL STABLE;
而setof则依赖SQL编译器解析,如下:
CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$ SELECT id, name FROM events WHERE type = $1; $$ LANGUAGE SQL STABLE;
使用的时候要明确as一把,如下:
SELECT * from events_by_type_2('social') as (id bigint, name text);
否则会提示"ERROR: a column definition list is required for functions returning "record""。
另外一种方式是不要返回record而是具体的类型,例如:
CREATE TYPE footype AS (score int, term text); CREATE FUNCTION foo() RETURNS SETOF footype AS $$ SELECT * FROM ( VALUES (1,'hello!'), (2,'Bye') ) t; $$ language SQL immutable; SELECT * FROM foo();
在pg 10+新版本中,本质上没有区别。return setof my_type会更合适一些,它鼓励重用类型、而不是随意的拼接。
https://stackoverflow.com/questions/22423958/sql-function-return-type-table-vs-setof-records
花若盛开,蝶自飞来,你若精彩,幸福开怀!2020年12月11日-18日
原文地址:https://www.cnblogs.com/zhjh256/p/14985294.html
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- springboot之快速构建springboot应用
- NLP简报(Issue#4)
- LaTeX常用篇(一)---公式输入
- 几个Python“小伎俩”(续)
- Transformers Assemble(PART III)
- 【python-双指针】pair with target sum
- springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
- vuejs之v-html
- linux之解决使用VMWare安装centos7后无法联网问题
- c++之引用
- c++之函数的其它用法
- c++之函数重载
- c++面向对象之封装
- c++之结构体struct和类class的区别
- c++之对象的初始化和清理