Проблема вызова функции в удаленной пространственной базе данных, в которой используется функция преобразования - PullRequest
0 голосов
/ 19 апреля 2019

Мне нужно получить координаты (x, y) в «пространственной» базе данных из «классической» базы данных через dblink.

вот моя версия Oracle: Oracle Database 11g Enterprise Edition, выпуск 11.2.0.4.0 - 64-разрядная версия

связь между базой данных 2 работает нормально.

Я создал функцию в пространственной базе данных, которая получает SGO_GEOMETRY объекта и возвращает sdo_point.x => это работало нормально через dblink

Теперь мне нужно преобразовать текущий х в другую пространственную единицу. для этого я использую

MDSYS.SDO_CS.transform

Работает нормально, если запустить функцию в пространственной базе данных. Сбой, если я вызываю функцию через dblink.

вот моя функция в пространственной базе данных:

FUNCTION TEST_GEOMETRY
    (
        p_compteur E_COMPTEUR_ABONNE.numero_reel%type
    ) 
    return number is
        w_geometry MDSYS.SDO_GEOMETRY;
        w_geometry_transformed MDSYS.SDO_GEOMETRY;
    begin
        begin
            select geometry into w_geometry from E_COMPTEUR_ABONNE where numero_reel = p_compteur;
            EXCEPTION WHEN no_data_found then return null; -- Compteur non trouvée 
        end;

        return w_geometry.sdo_point.x;

    end TEST_GEOMETRY;

если я запускаю его из «пространственной» базы данных, он работает нормально:

select test.test_geometry@elyx('09P010650') from dual;

Результат: 1711071,438

Теперь я заменяю return w_geometry.sdo_point.x;

по

   w_geometry_transformed :=MDSYS.SDO_CS.transform(w_geometry,4326);
   return w_geometry_transformed.sdo_point.x; 

работает нормально, если я запускаю его в пространственной базе данных. Я получил это через DBLINK:

Ваше соединение с базой данных было сброшено. Все ожидающие транзакции или состояние sesseion были потеряны.

Сначала я подумал, что у моего пользователя DBLINK отсутствует какая-то авторизация, но MDSYS является ПУБЛИЧНЫМ. Поэтому я попробовал другую функцию из пакета MDSYS.SOD_CS, и она работает:

w_test: = MDSYS.SDO_CS.tfm_axis_orientation_to_wkt ('test'); возврат 1;

только функции, использующие параметры MDSYS.SDO_GEOMETRY, оказались с ошибками.

У вас есть идея, почему и что нужно делать?

спасибо, Гектор

1 Ответ

0 голосов
/ 19 апреля 2019

Я не особенно хорош в Oracle Spatial, но я знаю, что SDO_GEOMETRY просто не будет работать над ссылкой на базу данных.

К счастью, есть некоторые обходные пути, одним из которых является WKT (Well Know Text), который представляет геометрию как текст .Вы можете использовать две функции:

  • SDO_UTIL.TO_WKTGEOMETRY
  • SDO_UTIL.FROM_WKTGEOMETRY

, поэтому посмотрите, могут ли они помочь.

Чтобы узнать больше, загляните в блог Алекса Патерсона, в котором описано, что еще можно сделать (http://www.tolon.co.uk/2012/09/geometry-objects-across-dblink/).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...