Мне нужно получить координаты (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, оказались с ошибками.
У вас есть идея, почему и что нужно делать?
спасибо,
Гектор