转自 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. solr查询工作原理深入内幕

    1.什么是Lucene? 作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用, ...

  2. 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权

    最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...

  3. Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类

    第一章,第一节 用泛型替换Framework 1.X版本的API类. 说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习 ...

  4. Angular2入门:TypeScript的接口

  5. Hive环境搭建及测试

     前提条件:已经安装好如下软件 Eclipse4.5 hadoop-2.7.3 jdk1.7.0_79 此篇文章基于上一篇文章:zookeeper高可用集群搭建 什么是Hive? 1.Hive是一个基 ...

  6. 【golang-GUI开发】Qt项目的打包发布

    这是本系列的第三篇文章,前两篇我们讲了qt的安装和编译,今天我们讲一讲程序的打包. 好像我们现在都没怎么讲到qt的使用,因为想要放开手脚写代码,一些基础是要打牢的. 不过请放心,下一篇文章开始我们就会 ...

  7. 【转】AJAX中JSON数据的返回处理问题

    AJAX处理复杂数据时,便会使用JSON格式.常用在对数据库的数据查询上.在数据库查询到数据后,便可在处理页面直接将数据转为JSON格式,然后返回. 本篇主要讨论:jQuery中,JSON数据在AJA ...

  8. Spring MVC 学习总结(十一)——IDEA+Maven+多模块实现SSM框架集成

    一.SSM概要 与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC ...

  9. 从零开始学安全(三十)●使用sqlmap对网站一步步渗透

    常规注入步骤第一步注入点-u "url" 判断是否是注入点 有就判断用户的权限第二步获取数据库 所有的 -u "url" --dbs第三步 查看应用程序所有数据 ...

  10. 第五讲 smart qq poll包处理 以及 私聊 群聊消息收发

    发送 poll包 public static void Login_PostPoll() { try { string url = "http://d1.web2.qq.com/channe ...