读书人

把累次调用的游标cursor的记录数据存放

发布时间: 2012-09-27 11:11:17 作者: rapoo

把多次调用的游标cursor的记录数据存放到数组array,postgresql与oracle

此文章主要讲postgresql怎么把游标数据存到数组



关于postgresql的文章比较难找到,通常都是先找到oracle再猜测postgresql代码怎么写

oracle的实现,可以参考把累次调用的游标cursor的记录数据存放到数组array,postgresql与oracle :

http://kongbei888.blog.163.com/blog/static/243266132010218104021496

http://dolphin-ygj.iteye.com/blog/440204

PG“基本类型”数组变量定义语法:

array_name  integer[];

?
或者

array_name  integer ARRAY[4];

?

当您看完这文章是否猜测,在PG应该如下定义数组才能存放游标的每条记录

array_name  表%rowtype[];array_name  游标%rowtype[];

?

可是调试后,你会发现以上代码编译都不能通过。。。

再回到PG的文档仔细阅读发现:?
数组类型可以是任何基本类型或用户定义类型。不支持复合类型和域的数组。 把累次调用的游标cursor的记录数据存放到数组array,postgresql与oracle

?


唯一能想到只能是先自定义数据类型了:

?

?

第一步:

?

create type array_type  AS (  border_type_cd  varchar(20),  max_value    numeric(9,3),  min_value    numeric(9,3),  ref_code    varchar(20));

?

?

第二步:定义变量

?

declare               ref_datas array_type[];               row_num int;              cursor_name  cursor is select * from table;

?

?第三步:循环游标数据cursor_name,放到数组ref_datas

?

row_num=0;for rd in cursor_name loop--raise notice '%',row_num;ref_datas[row_num]=row(rd.border_type_cd, rd.max_value, rd.min_value, rd.ref_code);row_num=row_num+1;end loop;

?

?第四步:从数组里拿数据

for i in 0..array_length(ref_datas,1)-1 loopraise notice 'border_type_cd(%)---------max_value(%)----------min_value(%)-------',ref_datas[i].border_type_cd,ref_datas[i].max_value,ref_datas[i].min_value;end loop;

?

如有不明,请回帖或qq(625514418)联系本人

读书人网 >操作系统

热点推荐