Ошибка синтаксиса SQL при создании пространственной сети

Я пытаюсь создать пространственную сеть из шейп-файла (представляющего центральные линии улиц), импортированного в базу данных Oracle с помощью FME Desktop. Пространственный объект «CENTRELINES» содержит столбец GEOM, который я хотел бы использовать в качестве основы для сетевого анализа для распределения средств (точек) скорой помощи среди домов престарелых (точек) на основе расстояния маршрута в качестве атрибута стоимости. Приветствуются любые советы по методологии решения этой болезненной проблемы в Oracle Spatial, но главная проблема в том, что я новичок в SQL. Я использовал документацию Oracle, чтобы составить следующий оператор SQL:

-- create an LRS geometry network
EXEC SDO_NET.CREATE_LRS_NETWORK(
  'LRS_net', -- network name
  'CENTRELINES', -- LRS geometry table name
  'GEOM', -- LRS geometry column name
  1, -- number of hierarchy levels
  FALSE, -- directed link?
  TRUE -- node with cost?
  );

Скрипт выводит следующее:

Error starting at line 2 in command:
EXEC SDO_NET.CREATE_LRS_NETWORK(
Error report:
ORA-06550: line 1, column 34:
PLS-00103: Encountered the symbol ";" when expecting one of the following:

   ( ) - + case mod new not null <an identifier>
   <a double-quoted delimited-identifier> <a bind variable>
   table continue avg count current exists max min prior sql
   stddev sum variance execute multiset the both leading
   trailing forall merge year month day hour minute second
   timezone_hour timezone_minute timezone_region timezone_abbr
   time timestamp interval date
   <a string literal with character set specification>
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

...

Error starting at line 9 in command:
)
Error report:
Unknown Command

Я понимаю, что строка 2 вызывает ошибку:

PLS-00103: Encountered the symbol ";" when expecting one of the following...

Учитывая, что для завершения запроса SQL требуются точки с запятой, почему это проблема?

РЕДАКТИРОВАТЬ: следующий скрипт создал сеть, добавив начало / конец:

begin
SDO_NET.CREATE_LRS_NETWORK(
  'LRS_net', 
  'CENTRELINES', 
  'GEOM', 
  1, 
  FALSE, 
  TRUE);
end;

Спасибо за помощь!


person mbcaradima    schedule 26.03.2013    source источник
comment
Я добавил синтаксис начала / конца:   -  person mbcaradima    schedule 27.03.2013
comment
Вам нужно добавить точку с запятой в строке 8. Измените TRUE) на TRUE);.   -  person Jon Heller    schedule 27.03.2013


Ответы (1)


Как отмечено в документации, SQL * Плюс команду execute обычно нужно вводить в одной строке:

Если ваша команда EXECUTE не помещается в одну строку из-за оператора PL / SQL, используйте символ продолжения SQL * Plus (дефис).

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

BEGIN
    SDO_NET.CREATE_LRS_NETWORK(;
END;
/

... что (возможно, очевидно, когда написано так) недействительно PL / SQL. Ничего общего с пространственным вызовом как таковым. Если вы действительно хотите разбить его на несколько строк, вы можете просто использовать явное _3 _ / _ 4_, а не сокращенное exec.

Вторая проблема может означать, что вы запускали короткую версию более одного раза, хотя это не та функция, с которой я очень хорошо знаком; но не связано с исходной ошибкой точки с запятой. (Кроме того, точка с запятой не обязательно нужна для завершения оператора SQL, но это деталь в другой раз ...).

person Alex Poole    schedule 27.03.2013