1、ORA-13226:没有空间索引接口将不被支持
当使用一个空间操作符时,如果没有使用空间索引导致该操作符不能被完成将会返回该错误。这可能会发生在当你使用的列上没有空间索引、或者优化器没有选择以所用为基础进行计算时。
解决办法:如果在空间操作符的列上没有索引,就创建一个索引。如果优化器没有选择空间索引,那么久显式地指定index或ordered以确保空间索引被使用。
例如:
select b.gwm_fid, b.gwm_fno, b.gwm_vno, a.gwm_tileid,b.districtid
from gs_tile_p2 a,VP_street_area b
where b.gwm_vno = 13001
and b.deletetag = 0
and b.gwm_status = 0
and sdo_relate(a.gwm_geometry, b.gwm_geometry, '' MASK= ANYINTERACT '') = ''TRUE'';
查询提示该错误,原因gs_tile_p2该表没有创建控件索引。
2、ORA-13203:读取USER_SDO_GEOM_METADATA视图失败
如果在USER_SDO_GEOM_METADATA视图中对没有任何元数据的表进行索引,就会返回该错误。
解决办法:在该视图中插入一条与空间层相关的记录。
比如:
CREATEINDEX INDEX_GS_TILE_P2 ONGS_TILE_P2(GWM_GEOMETRY)INDEXTYPEIS MDSYS.SPATIAL_INDEX;
提示ORA-13203错误,经查询发现没有在元数据中插入记录。
INSERTINTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME,DIMINFO, SRID)
VALUES ('GS_TILE_P2', 'GWM_GEOMETRY',
MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('X', -5000000, -5000000, 0.000000050),
MDSYS.SDO_DIM_ELEMENT('Y', -5000000, -5000000, 0.000000050),
MDSYS.SDO_DIM_ELEMENT('Z', 0,0, 0.000000050)
),
NULL);
3、ORA-13365:层的SRID与几何体的SRID不符
该错误暗示着在一个表的几何体中的SRID与USER_SDO_GEOM_METADATA视图中相应的SRID值不符。
解决办法:将两者的SRID设为一致。
4、 ORA-13223:SDO_GEOM_METADATA
中<table_name,column_name>的重复项
该错误表明,像USER_SDO_GEOM_METADATA视图中插入一条指定了<table_name,column_name>数据对的新记录失败。表明该视图中已经含有<table_name,column_name>数据对的记录。
解决办法:在向该视图插入新记录前,先删除含有<table_name,column_name>数据对的记录。
5、ORA-13249,ORA-02289:不能撤销序列/表
当你撤销一个空间索引时可能引发该错误。如果相应的序列/表不存在,DROP INDEX语句会引发这些错误。
解决办法:在DROPINDEX语句中增加FORCE。
如:DROP INDEX customers_sidx FORCE;
6、ORA-13249:sdo_index_metadata表在有重复条目
当尝试创建一个空间索引,且此时还有失败的DROP INDEX语句残留元数据时,该错误将会引发。
解决办法:显式地清除MDSYS模式中SDO_INDEX_METADATA表内指定索引的元数据。
DELETE FROM SDO_INDEX_METADATAWHERE sdo_index_owner = ‘SPATIAL’ AND sdo_index_name = ‘CUSTOMERS_SIDX’;
7、ORA-13207:不正确地使用<operator-name>操作符
当指定的操作符使用 不正确时可能引发该错误。绝大多数情况下,当SDO_RELATE、SDO_NN或SDO_WITHIN_DISTANCE操作符被应用到三维或四维空间索引时(通过在CREATE INDEX语句中的字句中指定SDO_INDEX_DIMS参数创建索引),可能引发该错误。
解决办法:在索引创建过程中,如果SDO_INDEX_DIMS参数被设置为大于2(默认操作符>值)时,可以使用的操作符只有SDO_FILTER。
8、ORA-13000:维数超出范围
当操作含有SDO_GTYPE值(在SDO_GEOMETRY对象中)小于10的几何体时,将会导致该错误。也许是因为早期的Oracle spatial版本中的SDO_GTYPE仅仅包含类型(T)信息。从Oracle9i开始,SDO_GEOMETRY中的SDO_GTYPE的格式为DOOT,其中D表明维度而T是类型信息。
解决办法:修改数据使其符合这一变化。另一种方法是使用SDO_MIGRATE.TO_CURRENT函数让Oracle spatial改变数据。
9、ORA-00904:…无效的标识符
selectgwm_geometry.sdo_srid from p_street_area进行查询时就会提示该错误
这是因为引用对象的属性时没有为表指定一个别名。如下操作就可以正常查询:
selecta.gwm_geometry.sdo_srid from p_street_area a;
10、ORA-00939:函数参数过多
当SDO_ORDINATES数组中插入一个超过1000个坐标的SDO_GEOMETRY时,可能引发该错误。
例如:
INSERTINTO sales_regions
VALUES
(1000,
sdo_geometry(2004,
8307,
NULL,
sdo_elem_info_array(1, 1, 1100),--1100个点
sdo_ordinate_array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.. . --重复99次
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
)));
提示too many arguments for function
解决办法:这是一个sql级别的限制。可以通过创建一个保存该几何体的pl/sql变量来避免这一错误,之后将该变量绑定到insert sql语句中:
DECLARE
geom sdo_geometry;
BEGIN
geom:=
sdo_geometry
(2004,
8307,
NULL,
sdo_elem_info_array(1, 1, 1100),--1100个点
sdo_ordinate_array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.. . --重复99次
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
)
);
executeimmediate
'INSERTINTO sales_regions values (1000,:gm)'using geom;
END;
11、ORA-13030:sdo_geometry的维数无效或者ORA-13364:层维数与几何体维数不符
空间索引、元数据中的diminfo,数据表中sdo_geometry中的GTYPE值要保持一致。
如果空间索引是2维的,就无法将数据表中二维坐标转换为三维的,必须将该索引先drop,然后更新坐标为三维,最后创建空间索引。