2015-05-20 26 views
0

我有一个单一的几何字段更改单个条例的值甲骨文 - 在表中在几何形状区域

select g3e_GEOMETRY from MyTable 
where g3e_FID = 15463352 

这返回

(3001,(,,),(1, 1,1,4,1,0,...,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,...,...,...,...,...,...,..., ,...,(1920181.3264,5801197.1585,0,0.345448182564728,0.93843782594412,0,...,,,,,,,,,,,,,,,,,,,, ,...,...,...,...,...,...,..., ,,,,,,,,,,,,,,,,))

技术上一样

SELECT SDO_GEOMETRY(3001,NULL,NULL, 
    SDO_ELEM_INFO_ARRAY(1,1,1,4,1,0), 
    SDO_ORDINATE_ARRAY(1920181.3264, 5801197.1585, 0, 0.345448182564728, 0.93843782594412, 0)) AS g3e_GEOMETRY 
FROM dual; 

现在我想改变0.93843782594412值说1.5

我可以从sdo_ordinances功能

select g.* from table(select p.g3e_GEOMETRY.sdo_ordinates from MyTable p 
where g3e_FID = 15463352) g; 

这会返回一个表叫做COLUMN_VALUE

一列得到各个位
1920181.3264 
5801197.1585 
0 
0.345448182564728 
0.93843782594412 
0 

但我现在不知道创建更新语句,这样我就可以更新0.938437825944121.5所需的SQL。

从我一直在阅读你必须一次更新整个sdo_ordinate数组。所以真的我需要生成下面的行(旧值+我的替换值)

SDO_ORDINATE_ARRAY(1920181.3264, 5801197.1585, 0, 0.345448182564728, 1.5, 0) 

任何想法赞赏。

Chris

+0

你试过'REPLACE'功能吗? – RubahMalam

回答

1

您可能需要一些PL/SQL代码。

declare 
    l_geometry mdsys.sdo_geometry; 
begin 
    -- Get the geometry from the table into the variable. 
    select g3e_geometry 
    into l_geometry 
    from mytable 
    where g3e_fid = 15463352; 

    -- Now you can do whatever you want with it. 
    l_geometry.sdo_ordinates(5) := 1.5; 

    -- Write back to the table 
    update mytable 
     set g3e_geometry = l_geometry 
    where g3e_fid = 15463352; 
end; 

由于您的建议更新似乎有点随机,这就是我现在所能做的。

+0

谢谢 - 这正是我需要的。 –