1000组以上坐标点集合转换成shape空间类型坐标处理方法

最近在做一个有关地图面上的点坐标集合存放在Clob字段中,遇到了个比较难搞定的事情。当clob字段中的坐标点集合超过1000组的时候发现,通过动态sql+加变量定义执行一次性转换成shape的空间类型时无法加入,抛出有关长度超出的错误。

因为动态sql执行在匿名块中最大只支持32767,而转换后的坐标集合已超过32767,实际长度已达到了39100。咨询同事们当时也没找到合适的办法,经过不断尝试,发现还是需要通过Sdo_Ordinate方面入手。是否能够把它定义成数组或是类似游标,不断向shape中的Sdo_Ordinate添加提取出来的坐标点。沿着这个方向,最终功夫不负有心人,找到了解决此问题解决办法。具体验证代码如下:

declare
v_cnt number(15):=1;
v_flag number(15):=1;
v_res sdo_ordinate_arrary;
v_cor clob;
v_pos varchar2(255);
begin
v_res:=sdo_ordinate_array();
select replace(a.rec_coordinate,';',',') into v_cor from x_zone_current a
where a.id=100000148;
v_res.delete;
while v_cnt>0 loop
if instr(v_cor,',',1,1)>0 then
v_pos:=substr(v_cor,1,instr(v_cor,',',1,1)-1);
v_res.extend;
v_res(res.last):=v_pos;
else
v_pos:=v_cor;
v_res.extend;
v_res(res.last):=v_pos;
exit;
end if;
end loop;
insert into x_new_coordinate(id,shape)
values(100000148,SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(v_res)))
end;

你可能感兴趣的:(Oracle相关)