加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql自定义类型并返回数组

发布时间:2020-12-13 16:10:49 所属栏目:百科 来源:网络整理
导读:转自?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_arr

转自?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,"(2,c,"(3,d,"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,"2018-10-31 17:35:40.881777") (1,"2018-10-31 17:35:40.881777") (2,"2018-10-31 17:35:40.881777") (3,"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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读