ORA-00936 отсутствует выражение для команды вставки SDO_GEOMETRY

#oracle

#Oracle

Вопрос:

Я хочу вставить sdo_geometry в свою таблицу, но не могу. Я не знаю, как вставить значение SDO_GEOMETRY. Я уверен, что имена столбцов указаны правильно.

Я попытался использовать эти два источника: документы Oracle, пример документов Oracle

Oracle выдает эту ошибку:

ORA-00936: выражение миссии

Строка скрипта 8, строка инструкции 8, столбец 22

 INSERT INTO HATYONETIM.MEVCUT_RAYLI_SISTEM_HATLARI(ID, ISIM_HAT, ISIM_KISA, TUR_HAT, ISIM_KURUM, MI_STYLE, MI_PRINX, GEOLOC) 
    VALUES(13, 'Name', 'M', 'Metro', 'Metro', null, 13, 
    MDSYS.SDO_GEOMETRY(2002, 
    8307, 
    0, 
    0, 
    NULL, 
    MDSYS.SDO_ELEM_INFO_ARRAY(NUMBER(1, 2, 1)), 
    MDSYS.SDO_ORDINATE_ARRAY(NUMBER(28.802437, 41.07247, 28.801767, 41.072785, 28.799637, 41.074663, 28.799177, 41.075009, 28.798757, 41.075232, 28.798107, 41.075481, 28.797488, 41.075631, 28.796882, 41.075683, 28.796348, 41.075683, 28.79575, 41.075609, 28.79198, 41.074751, 28.790744, 41.074489, 28.79002, 41.07438, 28.789173, 41.074316, 28.788104, 41.074356, 28.78653, 41.074482, 28.783164, 41.07483, 28.781041, 41.075094, 28.780753, 41.075152, 28.779255, 41.075542, 28.778821, 41.075703, 28.778291, 41.075918, 28.777854, 41.076114, 28.772736, 41.078684, 28.772297, 41.078885, 28.771977, 41.079006, 28.771762, 41.079072, 28.771488, 41.079147, 28.771177, 41.079212, 28.770589, 41.079292, 28.767417, 41.079622, 28.767263, 41.07963))))
 

Спасибо за вашу помощь. с наилучшими пожеланиями.

Ответ №1:

Конструктор SDO_GEOMETRY типа объекта принимает 5 аргументов, но вы передаете 7.

Oracle Spatial и Graph определяет тип объекта SDO_GEOMETRY как:

 CREATE TYPE sdo_geometry AS OBJECT (
  SDO_GTYPE     NUMBER,
  SDO_SRID      NUMBER,
  SDO_POINT     SDO_POINT_TYPE,
  SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
  SDO_ORDINATES SDO_ORDINATE_ARRAY
);
 

Уменьшите количество аргументов до 5, поместив ваши 3-й, 4-й и 5-й аргументы в SDO_POINT_TYPE объект, и это сработает:

 CREATE TABLE /*HATYONETIM.*/MEVCUT_RAYLI_SISTEM_HATLARI(
  ID         NUMBER,
  ISIM_HAT   VARCHAR2(20),
  ISIM_KISA  VARCHAR2(20),
  TUR_HAT    VARCHAR2(20),
  ISIM_KURUM VARCHAR2(20),
  MI_STYLE   NUMBER,
  MI_PRINX   NUMBER,
  GEOLOC     MDSYS.SDO_GEOMETRY
);

INSERT INTO /*HATYONETIM.*/MEVCUT_RAYLI_SISTEM_HATLARI(
  ID,
  ISIM_HAT,
  ISIM_KISA,
  TUR_HAT,
  ISIM_KURUM,
  MI_STYLE,
  MI_PRINX,
  GEOLOC
) VALUES(
  13,
  'Name',
  'M',
  'Metro',
  'Metro',
  null,
  13,
  MDSYS.SDO_GEOMETRY(
    2002, 
    8307, 
    MDSYS.SDO_POINT_TYPE(0,0,NULL), 
    MDSYS.SDO_ELEM_INFO_ARRAY( 1, 2, 1 ), 
    MDSYS.SDO_ORDINATE_ARRAY(
      28.802437, 41.07247,
      28.801767, 41.072785,
      28.799637, 41.074663,
      28.799177, 41.075009,
      28.798757, 41.075232,
      28.798107, 41.075481,
      28.797488, 41.075631,
      28.796882, 41.075683,
      28.796348, 41.075683,
      28.79575,  41.075609,
      28.79198,  41.074751, 
      28.790744, 41.074489, 
      28.79002,  41.07438,
      28.789173, 41.074316, 
      28.788104, 41.074356, 
      28.78653,  41.074482, 
      28.783164, 41.07483, 
      28.781041, 41.075094,
      28.780753, 41.075152,
      28.779255, 41.075542,
      28.778821, 41.075703,
      28.778291, 41.075918,
      28.777854, 41.076114,
      28.772736, 41.078684,
      28.772297, 41.078885,
      28.771977, 41.079006, 
      28.771762, 41.079072,
      28.771488, 41.079147,
      28.771177, 41.079212,
      28.770589, 41.079292,
      28.767417, 41.079622,
      28.767263, 41.07963
    )
  )
);
 

db<>скрипка здесь