修改对象 attribute/property — 不创建自定义函数
Modify object attribute/property — without creating custom function
我有一个 Oracle 18c SDO_GEOMETRY object 具有属性(又名属性):
with cte as (
select
sdo_util.from_wktgeometry('MULTILINESTRING ((0 5 0, 10 10 10, 30 0 33.54),(50 10 33.54, 60 10 -10000))') shape
from dual)
select
a.shape.sdo_gtype as old_gtype,
a.shape.sdo_gtype + 300 as new_gtype,
a.shape
from
cte a
OLD_GTYPE NEW_GTYPE SHAPE
--------- --------- -----
3006 3306 SDO_GEOMETRY(3006, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 10, 2, 1), SDO_ORDINATE_ARRAY(0, 5, 0, 10, 10, 10, 30, 0, 33.54, 50, 10, 33.54, 60, 10, -10000))
我想修改SDO_GEOMETRY对象的GTYPE属性:
- 旧 GTYPE:3006
- 新 GTYPE:3306
可以使用自定义函数(或内联函数)修改 GTYPE 属性:
- 在Convert M-enabled SDE.ST_GEOMETRY to SDO_GEOMETRY using SQL
中查看@AlbertGodfrind 的回答
但是,作为实验,我想在查询的 SELECT 子句中直接修改 GTYPE 属性,而不使用自定义函数。
例如,我想知道是否有这样的 OOTB 功能:
modify_object_property(object, property_name, new_val) returns sdo_geometry
有没有办法在不创建自定义函数的情况下修改 SDO_GEOMETRY GTYPE attribute/property?
您可以修改SQL中对象的内容。您只需要确保在 table 上使用 别名 。例如:
update my_table t
set t.geom.sdo_gtype = t.geom.sdo_gtype + 300
where ... ;
但这不是您要找的。在 select 列表中以这种方式修改对象是不可能的。因此,通过自定义函数的方法。
您可以按如下方式使用sdo_geometry构造函数
with cte as (
select
sdo_util.from_wktgeometry('MULTILINESTRING ((0 5 0, 10 10 10, 30 0 33.54),(50 10 33.54, 60 10 -10000))') shape
from dual)
select sdo_geometry(a.shape.sdo_gtype + 300,
a.shape.sdo_srid,
a.shape.sdo_point,
a.shape.sdo_elem_info,
a.shape.sdo_ordinates) as shape
from cte a;
我有一个 Oracle 18c SDO_GEOMETRY object 具有属性(又名属性):
with cte as (
select
sdo_util.from_wktgeometry('MULTILINESTRING ((0 5 0, 10 10 10, 30 0 33.54),(50 10 33.54, 60 10 -10000))') shape
from dual)
select
a.shape.sdo_gtype as old_gtype,
a.shape.sdo_gtype + 300 as new_gtype,
a.shape
from
cte a
OLD_GTYPE NEW_GTYPE SHAPE
--------- --------- -----
3006 3306 SDO_GEOMETRY(3006, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 10, 2, 1), SDO_ORDINATE_ARRAY(0, 5, 0, 10, 10, 10, 30, 0, 33.54, 50, 10, 33.54, 60, 10, -10000))
我想修改SDO_GEOMETRY对象的GTYPE属性:
- 旧 GTYPE:3006
- 新 GTYPE:3306
可以使用自定义函数(或内联函数)修改 GTYPE 属性:
- 在Convert M-enabled SDE.ST_GEOMETRY to SDO_GEOMETRY using SQL 中查看@AlbertGodfrind 的回答
但是,作为实验,我想在查询的 SELECT 子句中直接修改 GTYPE 属性,而不使用自定义函数。
例如,我想知道是否有这样的 OOTB 功能:
modify_object_property(object, property_name, new_val) returns sdo_geometry
有没有办法在不创建自定义函数的情况下修改 SDO_GEOMETRY GTYPE attribute/property?
您可以修改SQL中对象的内容。您只需要确保在 table 上使用 别名 。例如:
update my_table t
set t.geom.sdo_gtype = t.geom.sdo_gtype + 300
where ... ;
但这不是您要找的。在 select 列表中以这种方式修改对象是不可能的。因此,通过自定义函数的方法。
您可以按如下方式使用sdo_geometry构造函数
with cte as (
select
sdo_util.from_wktgeometry('MULTILINESTRING ((0 5 0, 10 10 10, 30 0 33.54),(50 10 33.54, 60 10 -10000))') shape
from dual)
select sdo_geometry(a.shape.sdo_gtype + 300,
a.shape.sdo_srid,
a.shape.sdo_point,
a.shape.sdo_elem_info,
a.shape.sdo_ordinates) as shape
from cte a;