修复ORA-54555错误的关键是确保几何数据的维度与表中定义的SDO_GEOMETRY列匹配。如果表定义为2D,确保插入的几何是2D;如果是3D,则使用3D坐标。远程处理方案:使用ST_Transform函数转换维度,或在客户端预处理几何数据后再插入。示例代码:UPDATE table SET geom = SDO_GEOM.VALIDATE_GEOMETRY(geom, 0.005) WHERE SDO_GEOM.VALIDATE_GEOMETRY(geom, 0.005) != 'TRUE'; 或者 ALTER TABLE table MODIFY (geom SDO_DIM_ARRAY(...));
Oracle社区讨论
ORA-54555: invalid geometry dimension ORA-06512: at "MDSYS.SDO_GEOM", line 209 ORA-06512: at "MDSYS.SDO_UTIL", line 413 ORA-06512: at line 10 这个错误是因为几何维度不匹配,修复方法是使用SDO_GEOM.SDO_DIM_ARRAY指定正确的维度数组。
CSDN博客
遇到ORA-54555几何维度无效,原因是导入的shp文件有Z坐标,但Oracle表是2D定义。解决方案:在ArcGIS中设置输出为2D格式,再导入。或者用SQL:SELECT SDO_UTIL.TO_2DGEOMETRY(geom) FROM dual;
Stack Overflow
To fix ORA-54555, validate the geometry first: SELECT cname, SDO_GEOM.VALIDATE_GEOMETRY(geometry, 0.005) FROM spatial_table WHERE SDO_GEOM.VALIDATE_GEOMETRY(geometry, 0.005) != 'TRUE'; 然后修正维度:UPDATE spatial_table SET geometry = SDO_UTIL.TO_2DGEOMETRY(geometry);
Oracle文档片段
The ORA-54555 error occurs when the number of dimensions in the SDO_GEOMETRY object does not match the dimensionality specified in the USER_SDO_GEOM_METADATA view. Remote fix: Use DBMS_METADATA to check metadata, then ALTER the layer dimension if possible, or transform geometries remotely via a procedure.
知乎回答
远程处理:写一个存储过程,从远程数据库拉取数据,用SDO_GEOM_METADATA更新维度,然后INSERT。代码:EXECUTE IMMEDIATE 'INSERT INTO local_table SELECT SDO_CS.TRANSFORM(geom, 4326) FROM remote_db@link.table';
博客园
修复步骤:1. 检查元数据:SELECT * FROM USER_SDO_GEOM_METADATA; 2. 确保DIMINFO匹配几何。远程方案:使用Database Link + ST_Transform(geom, diminfo) 在应用服务器处理。
FAQ
Q: ORA-54555常见原因是什么?
A: 几何对象的维度(如2D/3D)与表元数据不匹配。
Q: 如何远程验证几何?
A: 通过DB Link查询SDO_GEOM.VALIDATE_GEOMETRY。
Q: 能不能直接删除Z坐标?
A: 是,用SDO_UTIL.TO_2DGEOMETRY(geom)。
Q: 预防这个错误怎么做?
A: 导入前统一几何维度,更新USER_SDO_GEOM_METADATA。