2016-08-24 10 views
0

Я запрашивая базу данных Oracle Spatial с этим запросом (я ушел из других 1496 координаты):Максимальный размер SDO_ORDINATE_ARRAY/Oracle Spatial

SELECT * 
FROM pointsofinterest 
WHERE Sdo_inside (pointsofinterest.geoloc, 
       Sdo_geometry(2003, 4326, NULL, Sdo_elem_info_array(1, 1003, 1), 
       Sdo_ordinate_array(4.237378120400001, 43.7904510498, 4.2357025146, 
       43.7882575989 
            , 
              4.232352256800001, 43.7882575989, 
       4.232352256800001, 43.7871589661))) = 'TRUE' 

и получить эту ошибку:

ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause:
*Action: Error at Line: 4 Column: 27

Объект SDO_GEOMETRY содержит 1500 2D-координат. Это не должно быть проблемой в соответствии с http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#SPATL489

Когда я удаляю много координат, ошибок нет.

Я пропустил что-то о максимальном количестве координат в конструкторе SDO_GEOMETRY? Почему я получаю эту ошибку?

ответ

1

Эта ошибка исходит из одного из ограничений в SQL: максимальное количество аргументов, которые могут быть переданы хранимой функции или процедуре, т. Е. 999 аргументов (на самом деле 1000, включая возвращаемое значение). Это потому, что sdo_ordinate_array() на самом деле является функцией - конструктором типа sdo_ordinate_array.

Правильный подход (который также более эффективен) заключается в передаче объекта sdo_geometry в качестве переменной связывания и использовании этого в запросе. Способ, которым это делается, зависит от языка, который вы используете для подачи заявки на выбор ...

 Смежные вопросы

  • Нет связанных вопросов^_^