[英]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_ARRAY
和SDO_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.