转自 https://blog.csdn.net/victor_ww/article/details/44415895

create type custom_data_type as (
id int,
name varchar(50),
score decimal(5,2),
create_time timestamp
); create or replace function custom_data_type_demo(p_order_unit_array varchar[],p_goods_array int[])
returns custom_data_type[] as $$
declare
v_order_unit_array varchar[] := array['a','b','c']::varchar[];
v_goods_array int[] := array[60.56,82.12,95.32]::int[];
v_tmp_result custom_data_type;
v_result_array custom_data_type[];
v_index int := 0;
v_order varchar(100);
v_goods int;
begin
if p_order_unit_array is not null then
v_order_unit_array := p_order_unit_array;
end if; if p_goods_array is not null then
v_goods_array := p_goods_array;
end if; raise notice '-------1---------';
<<order_label>> foreach v_order in array v_order_unit_array loop
<<goods_label>> foreach v_goods in array v_goods_array loop
v_tmp_result.id = v_index*round(random()*10);
v_tmp_result.name = v_order;
v_tmp_result.score = v_goods;
v_tmp_result.create_time = current_timestamp;
raise notice '-------goods_label---------';
end loop goods_label;
raise notice '-------order_label---------v_index';
v_result_array[v_index] = v_tmp_result;
v_index := v_index + 1;
end loop order_label;
raise notice '-------2---------';
return v_result_array;
exception when others then
raise exception 'error happen(%)',sqlerrm;
end;
$$ language plpgsql; select custom_data_type_demo(null,null);
exampledb=> select custom_data_type_demo(null,null);
custom_data_type_demo
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[0:3]={"(0,a,95.00,\"2018-10-31 17:43:53.836608\")","(1,b,95.00,\"2018-10-31 17:43:53.836608\")","(2,c,95.00,\"2018-10-31 17:43:53.836608\")","(3,d,95.00,\"2018-10-31 17:43:53.836608\")"}
(1 row)
解析数组,可用于不定参数时,可使用传数组的方式,类似于SQL Server 的Xml;
exampledb=> select T from unnest(custom_data_type_demo(null,null)) as T;
t
------------------------------------------
(0,a,95.00,"2018-10-31 17:35:40.881777")
(1,b,95.00,"2018-10-31 17:35:40.881777")
(2,c,95.00,"2018-10-31 17:35:40.881777")
(3,d,95.00,"2018-10-31 17:35:40.881777")
(4 rows) exampledb=> select T.id,T.name,T.score,T.create_time from unnest(custom_data_type_demo(null,null)) as T;
id | name | score | create_time
----+------+-------+----------------------------
0 | a | 95.00 | 2018-10-31 17:40:25.939054
1 | b | 95.00 | 2018-10-31 17:40:25.939054
2 | c | 95.00 | 2018-10-31 17:40:25.939054
3 | d | 95.00 | 2018-10-31 17:40:25.939054
(4 rows)

postgresql自定义类型并返回数组的更多相关文章

  1. webservice调用接口,接口返回数组类型

    1. 其中sendSyncMsg1接口是方法名,Vector实现了List接口,xml是sendSyncMsg1的方法形参 Service service = new Service(); Call ...

  2. WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型

    首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...

  3. 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型

    // org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...

  4. 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)

    1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...

  5. 用typedef自定义类型语法你真的会吗

    关于typedef  我们学习typedef的时候,他的定义语法是:typedef+类型+别名,但是按照上面的格式,自定义数组怎么定义呢,是这样tepedef int a[10] 别名?还是这样tep ...

  6. 一个关于自定义类型作为HashMap的key的问题

    在之前的项目需要用到以自定义类型作为HashMap的key,遇到一个问题:如果修改了已经存储在HashMap中的实例,会发生什么情况呢?用一段代码来试验: import java.util.HashM ...

  7. [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. struts2自定义类型转换器

    首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...

  9. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

随机推荐

  1. pip/pip3更换国内源

    pip/pip3更换国内源 用途:pip更换为国内源,可以大大的提高安装成功率和速度. Windows更换pip/pip3源 打开目录:%appdata% 新增pip文件夹,新建pip.ini文件 给 ...

  2. zepto 事件分析4(事件队列)

    前面分析了zepto的事件绑定,接下来分析事件解绑,先看一下zepto中解绑的off方法: $.fn.off = function(event, selector, callback){ var $t ...

  3. sql存储过程,根据多个条件查询,返回一个dataTable或者DataSet

    不废话,先直接代码 首先sql部分(我在这里加了一个@zx作为判断,一般不需要这个参数): ALTER Proc [dbo].[Proc_Boss_Show] ),--开始条数 ),--结束条数 @S ...

  4. [转]Angular: Hide Navbar Menu from Login page

    本文转自:https://loiane.com/2017/08/angular-hide-navbar-login-page/ In this article we will learn two ap ...

  5. [心得]如何快速利用SqlMap做安全檢測

    SqlMap的介紹我就不詳提啦!SqlMap是用來尋找與做Sql-injection的一款工具 在使用前你需要安裝python唷!安裝的過程我們就不介紹了. 直接來看如何快速使用SqlMap吧! 這裡 ...

  6. ls 指令的介绍

    每个文件在linux下面都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢? modification time (mtime) : 当该文件的“内容数据”变更时,就会更 ...

  7. 近20个绚丽实用的jQuery/CSS3侧边栏菜单(转载)

    http://developer.51cto.com/art/201510/493530.htm 近20个绚丽实用的jQuery/CSS3侧边栏菜单 jQuery作为一款主流的JavaScript前端 ...

  8. 12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示

    1.解决Win平台中文显示 1.1首先解决win平台上中文显示乱码问题 1)首先查看qt creator的编码格式 通过->编辑->选择编码 查看. 2)如果qt creator的编码格式 ...

  9. python基础学习(六)函数基础

    函数的基本使用 函数的定义 def 函数名(): 函数封装的代码 …… def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 函数名称 的命名应该 符合 ...

  10. JavaScript 笔记(一)

    Number 1.2345e3=1.2345*1000 NaN//not a num 无法计算结果 Infinity //无限大 数组 var arr=[1,2,'hello'] 下标从0开始 对象 ...