2016-04-14 6 views
1

Ich habe eine Tabelle 'Floating_Optionen', und ich möchte einen räumlichen Index für eine Spalte 'Area_geo' erstellen (das ist eine sdo_geometry Spalte, mit zwei Zeilen von Daten, die erwartet angezeigt werden, wenn ich auswählen * von Floating_options).Erstellen eines räumlichen Index auf Oracle

Ich habe den folgenden Code verwendet, aber ich erhalte den Fehler unten. Ich wäre sehr dankbar für jede Hilfe! Vielen Dank!

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. 
+0

welche Version .. – Mihai

+1

Willkommen bei Stackoverflow?. In Zukunft verwenden Sie bitte das Formatierungswerkzeug '{}' oben links im Bearbeitungsfeld des markierten Textes, um es als code/data/output/errMsgs/etc zu formatieren. Viel Glück – shellter

+1

Ich habe [ein vorheriges Beispiel hier] (http://Stackoverflow.com/a/33258347/1509264) - Ich werde es nicht erneut posten, da @micklesh die Bits abgedeckt hat, die Sie vermissen seine Antwort. – MT0

Antwort

4

Bevor Sie die Tabelle Indizierung sollten Sie es haben ‚räumlich aktiviert‘.
Versuchen zu überprüfen, ob es in der räumlichen Metadaten angezeigt:

SELECT * FROM USER_SDO_GEOM_METADATA 
    WHERE TABLE_NAME = UPPER('floating_options') 
     AND COLUMN_NAME = UPPER('area_geo'); 

Wenn es keine Ergebnisse gibt - dann ein paar Optionen zur Verfügung stehen.
Ein schmutzige Art und Weise - Daten einfügen

Bitte nehmen Sie auch einen Blick auf https://community.oracle.com/thread/836452?tstart=0 oder http://gerardnico.com/wiki/oracle_spatial/metadata

+0

Großartig! Vielen Dank. Dies hat erfolgreich eine Zeile in die Tabelle USER_SDO_GEOM_METADATA eingefügt, die ich sehen kann, wenn ich sie wie oben beschrieben abfrage. Allerdings, wenn ich dies auf der Tabelle oben erwähnt und das gleiche in einer anderen Tabelle mit Punktkoordinaten (mit der INSERT INTO-Anweisung, die Sie oben beschrieben haben) und dann eine SDO_CONTAINS Abfrage verwenden, bekomme ich noch: {ORA-13226: Schnittstelle wird nicht unterstützt ohne einen räumlichen Index}, was möglicherweise darauf hinweist, dass ein Index nicht erfolgreich erstellt wurde. –

+0

Nun, diese Einfügung erstellt keinen Index. Sie sollten jetzt den räumlichen Index erstellen, wie Sie es bereits versucht haben: CREATE INDEX area_idx ON floating_options (area_geo) INDEXTYPE IS MDSYS.SPATIAL_INDEX; – micklesh

1

Folgendes sollte auch in Betracht gezogen werden, um den < Platzhalter> entsprechend direkt

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>); 

Bitte ändern: Oracle unterscheidet zwischen Groß- und Kleinschreibung. see this post.

Das nächste Problem mit den "intelligenten" Jungs von Oracle ist, dass ihre Tabelle USER_SDO_GEOM_METADATA keine Kleinbuchstaben unterstützt (zumindest in 11g).

Also mit einer Tabellendefinition wie diese

CREATE TABLE "cola_markets" (
    "mkt_id" NUMBER PRIMARY KEY, 
    "name" VARCHAR2(32), 
    "shape" SDO_GEOMETRY); 

können Sie keinen räumlichen Index erstellen.

Wenn die Metadaten Einfügen

INSERT INTO USER_SDO_GEOM_METADATA 
    VALUES (
    'cola_markets', 
    'shape', 
    SDO_DIM_ARRAY( -- 20X20 grid 
    SDO_DIM_ELEMENT('X', 0, 20, 0.005), 
    SDO_DIM_ELEMENT('Y', 0, 20, 0.005) 
    ), 
    NULL -- SRID 
); 

die Namen werden in Großbuchstaben umgewandelt.

Wenn Sie dann den Index erstellen

CREATE INDEX cola_spatial_idx 
    ON "cola_markets"("shape") 
    INDEXTYPE IS MDSYS.SPATIAL_INDEX; 

Sie den Fehler oben erwähnt

ORA-13203: failed to read USER_SDO_GEOM_METADATA view 

, weil es nicht die Kleinen Namen in der Metadatentabelle finden.

Fazit:

  • Verwendung nur Großbuchstaben Namen (oder keine doppelten Anführungszeichen)
  • Orcale Jungs sind Dummköpfe
Verwandte Themen