|
为什么要把游标数据存到数组
如果一个游标频繁调用,那么就会频繁访问数据库,导致效率慢。
如果把调用一次游标后,把数据存到数组,效率会高。
postgresql与oracle 转换成array的区别
关于postgresql的文章比较难找到,通常都是先找到oracle再猜测postgresql代码怎么写
oracle的实现,可以参考  :
array_name integer[];
或者
array_name integer ARRAY[4];
当您看完这文章是否猜测,在PG应该如下定义数组才能存放游标的每条记录
array_name 表%rowtype[];array_name 游标%rowtype[];
可是调试后,你会发现以上代码编译都不能通过。。。
再回到PG的文档仔细阅读发现:
数组类型可以是任何基本类型或用户定义类型。 不支持复合类型和域的数组。 
唯一能想到只能是先自定义数据类型了:
第一步:
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.border_type_cd,ref_datas.max_value,ref_datas.min_value;end loop;
如有不明,请回帖或qq(625514418)联系本人 |