我的 GIS 软件有一个名为ST_GEOMETRY的 Oracle 18c 对象类型。
对象类型具有属性:
空间类型的属性表示以下信息:
- 实体:存储在空间列中的几何特征类型(线串、多线串、多点、多面、点或多边形),其值是从 st_geom_util 存储过程派生的位掩码。
- Numpts:定义几何的点数;对于多部分几何,这包括每个部分之间的分隔符,每个分隔符一个点。
- Minx, miny, maxx, maxy:几何的空间包络
- 面积:几何的面积
- Len:几何体的周长
- SRID:包含将其链接到 ST_Spatial_References 表中其关联空间参考(坐标系)记录的几何标识符
- Points:包含定义几何的点坐标的字节流
我可以使用以下两种方法之一选择对象的属性:
- 使用 Oracle 的TREAT()函数。
select treat(shape as sde.st_geometry).numpts as num_points from a_test_table NUM_POINTS ---------- 37 161
- 或者我可以简单地使用别名:
select a.shape.numpts as num_points from a_test_table a NUM_POINTS ---------- 37 161
问题:
为什么需要使用别名从 Oracle 对象中选择属性?
如果我要删除别名...
select
shape.numpts as num_points
from
a_test_table
然后我会得到一个错误:
ORA-00904: "SHAPE"."NUMPTS": invalid identifier
因为甲骨文做到了。
t_alias
这是 SQL 解析器识别元素的必要条件。如果没有别名,它会与点符号混淆。请注意,它适用于所有对象类型。不仅仅是 ST_GEOMETRY 或 SDO_GEOMETRY。
(我不知道这个
treat(... as ...)
技巧。但是使用别名仍然更简单。