Spatial Index Issue(s) ORA-29902 ORA-13200 ORA-13220 ORA-06512
994501Mar 17 2013 — edited Mar 17 2013I am having issues running the query below. If I change the values of the SDO_ORDINATE_ARRAY, some values work, some values don't. Below is an example of when it fails. I have successful queries using SDO_NN, so something must be working...
How should I go about figuring out this issue (very new to Spatial)? Working on Windows 7 Prof OS.
select p.building_polygon
from spat.building p, spat.firebuilding f
where p.building_name=f.building_on_fire and
SDO_RELATE(p.building_polygon,
SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(768,278,477,504,155,115)),'mask=ANYINTERACT') = 'TRUE'
*
Error at line 0
ORA-29902: error in executing ODCIIndexStart() routine
ORA-13200: internal error [WINDOW_OBJECT] in spatial indexing.
ORA-13220: failed to compare tile with the geometry
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 333
Script used to create objects:
create user spat identified by spat;
grant all privileges to spat;
conn spat/spat;
alter session set current_schema = spat;
SET DEFINE OFF;
CREATE TABLE spat.BUILDING
(
BUILDING_ID VARCHAR2(3),
BUILDING_NAME VARCHAR2(50),
VERTICES_COUNT INT,
BUILDING_POLYGON MDSYS.SDO_GEOMETRY,
CONSTRAINT BUILDING_PK PRIMARY KEY (BUILDING_ID)
);
CREATE TABLE spat.FIREHYDRANT
(
FIREHYDRANT_ID VARCHAR2(3),
HYDRANT_POINT MDSYS.SDO_GEOMETRY,
CONSTRAINT FIREHYDRANT_PK PRIMARY KEY (FIREHYDRANT_ID)
);
CREATE TABLE spat.FIREBUILDING
(
BUILDING_ON_FIRE VARCHAR(50),
CONSTRAINT FIREBUILDING_PK PRIMARY KEY (BUILDING_ON_FIRE)
);
INSERT INTO USER_SDO_GEOM_METADATA
VALUES ('BUILDING', 'BUILDING_POLYGON',
SDO_DIM_ARRAY( SDO_DIM_ELEMENT('X', 0, 820, 0.005),
SDO_DIM_ELEMENT('Y', 0, 580, 0.005)), NULL);
INSERT INTO USER_SDO_GEOM_METADATA
VALUES ('FIREHYDRANT', 'HYDRANT_POINT',
SDO_DIM_ARRAY( SDO_DIM_ELEMENT('X', 0, 820, 0.005),
SDO_DIM_ELEMENT('Y', 0, 580, 0.005)), NULL);
COMMIT;
CREATE INDEX spat.BUILDING_SPATIAL_IDX
ON spat.BUILDING(BUILDING_POLYGON)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
CREATE INDEX spat.FIREHYDRANT_SPATIAL_IDX
ON spat.FIREHYDRANT(HYDRANT_POINT)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
COMMIT;
==================UPDATE==========================
Ok, I've noticed something interesting. If I have 3 points in my ordinate array, the errors are thrown. If I have more than 3 points in my ordinate array, it works. Could anyone explain why this is and if there is a way around it?
select p.building_polygon
from spat.building p, elkordy.firebuilding f
where p.building_name=f.building_on_fire
and SDO_ANYINTERACT(p.building_polygon
, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1)
--,SDO_ORDINATE_ARRAY(232,91,149,226,277,198))) = 'TRUE'; -- USE ONLY ONE
--,SDO_ORDINATE_ARRAY(165,84,168,484,769,534,743,108))) = 'TRUE'; -- USE ONLY ONE
Edited by: AmeerE on Mar 17, 2013 12:19 AM