[b]過程描述:[/b]
執行的SQL語句:CREATE INDEX GC_ROAD_SEGMENT_CH_SIDX ON GC_ROAD_SEGMENT_CH(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
抛出的異常: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
[b]問題分析:[/b]
(1)使用以下語句檢視建立索引結果:
select INDEX_NAME,TABLE_OWNER,TABLE_NAME,STATUS,ITYP_OWNER,ITYP_NAME,DOMIDX_STATUS,DOMIDX_OPSTATUS from user_indexes where ITYP_NAME is not null;
找到相應的記錄,或者在上述查詢中加入相應的條件(指定表名和索引類型)DOMIDX_OPSTATUS對應的為FAILED,說明建立空間索引失敗。
(2)使用以下語句檢視相應中繼資料:
select * from user_sdo_geom_metadata
可以在查詢條件中加入表名條件,縮小搜尋範圍,發現中繼資料表中無記錄。
[b]原 因:[/b]
當時建立空間表時沒有建立相應的空間中繼資料。
[b]解決辦法:[/b]
(1)先在user_sdo_geom_metadata中使用以下語句建立相應的中繼資料
insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO, SRID)
values(
'GC_ROAD_SEGMENT_CH',
'GEOMETRY',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),
MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005)
),
8307
)
(2)再執行空間索引建立語句:
CREATE INDEX GC_ROAD_SEGMENT_CH_SIDX ON GC_ROAD_SEGMENT_CH(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
無錯誤提示,問題得到解決。
[b]總 結:[/b]
在建立空間索引時先建立相應的中繼資料。