postgresql自定义类型并返回数组
转自 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自定义类型并返回数组的更多相关文章
- webservice调用接口,接口返回数组类型
1. 其中sendSyncMsg1接口是方法名,Vector实现了List接口,xml是sendSyncMsg1的方法形参 Service service = new Service(); Call ...
- WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...
- 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型
// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...
- 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)
1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...
- 用typedef自定义类型语法你真的会吗
关于typedef 我们学习typedef的时候,他的定义语法是:typedef+类型+别名,但是按照上面的格式,自定义数组怎么定义呢,是这样tepedef int a[10] 别名?还是这样tep ...
- 一个关于自定义类型作为HashMap的key的问题
在之前的项目需要用到以自定义类型作为HashMap的key,遇到一个问题:如果修改了已经存储在HashMap中的实例,会发生什么情况呢?用一段代码来试验: import java.util.HashM ...
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- struts2自定义类型转换器
首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...
随机推荐
- Mysql 调优和水平扩展思路
系统调优参数 一些比较重要的参数: back_log:back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中.如果MySql的连接数据达到max_connecti ...
- How Tomcat works — 三、tomcat启动(2)
在了解了tomcat 的一些基本组件之后,学习启动过程就更容易理解了,因为启动过程就是启动各个组件. 目录 启动顺序 Bootstrap类 Catalina类 StandardServer类和Stan ...
- 【原创】uC/OS II 任务切换原理
今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...
- Java设计模式学习记录-观察者模式
前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...
- oracle10G/11G官方迅雷下载地址合集
原文链接:https://blog.csdn.net/zlsunnan/article/details/8058235 ORACLE11GR2 Oracle Database 11g Release ...
- C#实现多态之接口。
一.什么是接口? 接口就是一种规范协议,约定好遵守某种规范就可以写通用的代码. 定义了一组具有各种功能的方法(只是一种能力,没有具体实现,就像抽象方法一样,“光说不做”). 理解:内存该做成什么样的: ...
- 使用IIS调试ASP.NET网站程序
在实际的开发当中,相信很多的开发者在开发调试ASP.NET网站时候都是直接通过Visual Studio工具的编译运行来调试的. 一般情况下,这种调试方式也不会有多少问题,但有时候我们会发现这样的一个 ...
- TortoiseGit为github账号添加SSH keys,解决pull总是提示输入密码的问题
每次同步或者上传代码到githun上的代码库时,需要每次都输入用户名和密码,这时我们设置一下SSH key就可以省去这些麻烦了.若果使用TortoiseGit作为github本地管理工具,Tortoi ...
- Notepad++ 配置 Sql PoorMan 插件
作用:用来格式化 sql 命令语句 配置方法: Notepad++ 与 PoorMan 插件要版本一致 64对64 32对32 Notepad++ 在 D:\Notepad++\plugins 目录 ...
- Android Studio 活动启动模式
启动模式一共分4种 可以再配置文件中设置 <activity android:name=".MainActivity" android:launchMode="si ...