簡體   English   中英

在 Oracle 中使用 arrays SDO_GEOMETRY

[英]Using arrays in Oracle SDO_GEOMETRY

我在學習如何使用 Oracle SQL 時遇到一些問題,但有一件事似乎不起作用,我不明白為什么:

我正在嘗試使用 SDO_GEOMETRY 對象來更新表中的坐標值。 我正在嘗試聲明 VARRAY,用所需的坐標和 ELEM_INFO 填充這些 arrays,並將這些 arrays 傳遞到update部分的 SDO_GEOMETRY 對象中,如下所示:

CREATE OR REPLACE TYPE decimal_array is varray(728) OF NUMBER (10,9); 
CREATE OR REPLACE TYPE int_array IS VARRAY(67) OF INTEGER; 
> /

DECLARE 

sdo_ordinate_arr decimal_array := decimal_array(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5); 
info_arr int_array := int_array(1,1003,1, 19,2003,1);

begin 

update schema.table set geo_coord = (SDO_GEOMETRY(2003, 25832, NULL, 
SDO_ELEM_INFO_ARRAY(info_arr), SDO_ORDINATE_ARRAY(sdo_ordinate_arr))) where id = 123456;

END; 
> /

我嘗試了上面的 SQL,並希望它能工作,但沒有。 沒有出現錯誤,但表中的值未更新。

如果我這樣做,沒有 arrays 但使用相同的值,它可以工作:

update schema.table set geo_coord_ = (SDO_GEOMETRY(2003, 25832, NULL, 
SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5))) where id = 123456;

正如我從文檔中了解到的那樣, SDO_ELEM_INFO_ARRAYSDO_ORDINATE_ARRAY都聲明為 arrays。如果將數組作為值傳遞,為什么它不起作用?

知道了,您需要將 arrays 聲明為 SDO_ELEM_INFO_ARRAY 和 SDO_ORDINATE_ARRAY,而不是 VARRAY:

sdo_ordinate_arr SDO_ORDINATE_ARRAY:= SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5)

info_arr SDO_ELEM_INFO_ARRAY := SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1)

Oracle 令人困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM