Код Oracle «sdo_net_mem.network_manager.shortest_path» не работает

#oracle #shortest-path #oracle-spatial

#Oracle #кратчайший путь #oracle-пространственный

Вопрос:

Я попытался создать пространственную сеть в редакторе клиента Oracle Sql Developer; Когда я попробовал этот код, он дал мне «истинный» результат;

 SELECT SDO_NET.NETWORK_EXISTS('network_name') FROM DUAL;
  

это означает, что команды SDO_NET работают должным образом.

Но, когда я попытался этот код;

 DECLARE
  cost NUMBER;
  path_id NUMBER;
  res_numeric NUMBER;
BEGIN
   path_id := sdo_net_mem.network_manager.shortest_path('network_name',source_node_id, dest_node_id);
   cost := SDO_NET_MEM.PATH.GET_COST('network_name', path_id);
   DBMS_OUTPUT.PUT_LINE('The ID of the shortest path from X to Y is: ' || path_id || ' and it costs ' || cost);
END;
  

Дал мне этот результат;

введите описание изображения здесь

Как я могу это решить; Спасибо.

Ответ №1:

Вы сначала загрузили сеть? Вы делаете это с помощью процедуры SDO_NET_MEM.NETWORK_MANAGER.READ_NETWORK(). В вашем случае:

 SDO_NET_MEM.NETWORK_MANAGER.READ_NETWORK('network_name', 'TRUE');
  

Обратите внимание, что пакет SDO_NET_MEM устарел в 12c и больше не должен использоваться.

Комментарии:

1. есть ли другой возможный способ создания пространственной сети в oracle?

Ответ №2:

Попробуйте выполнить эту процедуру для проверки вашей сети

select SDO_NET.VALIDATE_NETWORK('network_name') from dual;

какая у вас версия Oracle?

Обычно мы выполняем сеть чтения перед запуском любых сетевых методов.