解决postgresql和oracle如何把游标cursor数据存到数组array

 

 

为什么要把游标数据存到数组

如果一个游标频繁调用,那么就会频繁访问数据库,导致效率慢。

如果把调用一次游标后,把数据存到数组,效率会高。

 

postgresql与oracle  转换成array的区别

 

关于postgresql的文章比较难找到,通常都是先找到oracle再猜测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的文档仔细阅读发现: 
数组类型可以是任何基本类型或用户定义类型。不支持复合类型和域的数组

 


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

 

 

第一步:

 

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 loop
	raise 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)联系本人

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值