Oracle пространственный оператор SDO_JOIN возвращает недопустимый номер ORA-01722 - PullRequest
1 голос
/ 18 июня 2020

Во-первых, я создал метаданные в user_sdo_geom_metadata для двух таблиц test_katt и test_del_ko. Каждая таблица имеет уникальный идентификатор (featureid). И одна таблица имеет геометрию точек, а другая - многоугольники.

- пример

insert into user_sdo_geom_metadata (table_name, column_name, diminfo,srid) values (
    'test_katt',  --table name
    'geometry',         
    SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Y',365000,627000,0.005), --box
    SDO_DIM_ELEMENT('X',28000,195000,0.005)), --box
    null
  );

Во-вторых: я создал пространственный индекс для обеих таблиц:

create index test_katt_idx 
          on test_katt (geometry) indextype is mdsys.spatial_index;

Наконец, я хотел объединить данные из точек в test_katt и данные из полигонов в test_del_ko на основе любого пространственного взаимодействия. Результат: Отчет об ошибке - ORA-01722: недопустимый номер

select *   
from test_del_ko dk, test_katt ka,  
                table (SDO_JOIN('test_del_ko', 'geometry',   
                'test_katt', 'geometry',   
                'mask = anyinteract') )a  
where a.rowid1 = dk.featureid  
and a.rowid2 = ka.featureid;

Мне еще не удалось создать результат с помощью SDO_JOIN, поэтому любая помощь с процедурой будет очень полезна. У нас есть база oracle 12.

1 Ответ

0 голосов
/ 18 июня 2020

В вашем запросе a.rowid1 и a.rowid2 - это oracle rowid в формате varchar2, и вы сравниваете их со столбцами featureid в ваших таблицах, и я полагаю, что это числа. Вот почему у вас ошибка. Вместо этого используйте этот запрос:

select *   
from test_del_ko dk, test_katt ka,  
                table (SDO_JOIN('test_del_ko', 'geometry',   
                'test_katt', 'geometry',   
                'mask = anyinteract') )a  
where a.rowid1 = dk.rowid  
and a.rowid2 = ka.rowid;
...