在oracle上创建空间索引

Jam*_*mbe 2 sql oracle geospatial spatial-index

我有一个表'floating_options',我想在列'area_geo'上创建一个空间索引(这是一个sdo_geometry列,当我从floating_options中选择*时,有两行数据按预期显示).

我使用了以下代码,但我收到以下错误.我会非常感谢任何帮助!谢谢!

CREATE INDEX area_idx ON floating_options(area_geo)
   INDEXTYPE IS MDSYS.SPATIAL_INDEX;


Error report -
SQL Error: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 10
29855. 00000 -  "error occurred in the execution of ODCIINDEXCREATE routine"
*Cause:    Failed to successfully execute the ODCIIndexCreate routine.
*Action:   Check to see if the routine has been coded correctly.
Run Code Online (Sandbox Code Playgroud)

mic*_*esh 6

在为表格编制索引之前,您应该"在空间上启用".
尝试检查它是否显示在空间元数据中:

SELECT * FROM USER_SDO_GEOM_METADATA
    WHERE TABLE_NAME = UPPER('floating_options')
      AND COLUMN_NAME = UPPER('area_geo');
Run Code Online (Sandbox Code Playgroud)

如果没有结果 - 那么可以使用几个选项.
一种肮脏的方式 - 直接插入数据

INSERT INTO USER_SDO_GEOM_METADATA
VALUES (UPPER('floating_options'),UPPER('area_geo'),
        mdsys.SDO_DIM_ARRAY(
             mdsys.SDO_DIM_ELEMENT('Easting', <lowest_x>, <highest_x>, <x_tolerance>),
             mdsys.SDO_DIM_ELEMENT('Northing', <lowest_y>, <highest_y>, <y_tolerance>)
        ), <SRID>);
Run Code Online (Sandbox Code Playgroud)

请相应更改< 占位符 >

请查看https://community.oracle.com/thread/836452?tstart=0http://gerardnico.com/wiki/oracle_spatial/metadata