使用SDO_GCDR.GEOCODE_AS_GEOMETRY转换地址报错ORA-13199咨询
问题分析与解决方案
错误原因:ORA-13199: SRID 0 does not exist
你遇到的错误是因为SDO_GCDR.GEOCODE_AS_GEOMETRY默认返回的SDO_GEOMETRY对象使用SRID 0,而这个空间参考ID并未在Oracle Spatial的SDO_COORD_REF_SYS表中注册,Oracle无法识别该SRID,因此抛出错误。
解决方法:指定有效SRID
要解决这个问题,你需要确保生成的几何对象使用Oracle认可的有效SRID,比如全球通用的WGS84坐标系(SRID=4326),以下是两种可行方式:
方式1:地理编码后转换SRID
使用SDO_CS.TRANSFORM函数将生成的几何对象转换为SRID 4326:
SELECT SDO_CS.TRANSFORM( SDO_GCDR.GEOCODE_AS_GEOMETRY( 'My_workspace', SDO_KEYWORDARRAY(address), country ), 4326 ) AS location_geom FROM pickup_location;
方式2:直接构造带SRID的几何对象
如果GEOCODE_AS_GEOMETRY返回的坐标本身是WGS84格式(多数地理编码服务默认输出),可以直接重新构造SDO_GEOMETRY对象并指定SRID:
SELECT SDO_GEOMETRY( sdo_gcdr.geocode_as_geometry('My_workspace', SDO_KEYWORDARRAY(address), country).sdo_ordinates, 4326 ) AS location_geom FROM pickup_location;
是否必须存储坐标字段?
不需要额外存储坐标字段。只要在查询时动态生成带有有效SRID的SDO_GEOMETRY对象,Apex的地图组件就能正确解析并标记位置。需要注意两点:
- 动态地理编码会产生额外性能开销,数据量较大时需评估性能影响
- 确保Oracle环境已正确配置
My_workspace对应的地理编码数据源
内容的提问来源于stack exchange,提问作者XXiRRurGG
相关产品推荐
相关产品推荐

