Oracle Spacial(空间数据库)常见的错误

来源:互联网 发布:java ip 端口号 编辑:程序博客网 时间:2024/06/04 19:38

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_P2ONGS_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_sridfrom p_street_area进行查询时就会提示该错误

这是因为引用对象的属性时没有为表指定一个别名。如下操作就可以正常查询:

selecta.gwm_geometry.sdo_sridfrom 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,然后更新坐标为三维,最后创建空间索引。
阅读全文
0 0
原创粉丝点击