【发布时间】:2019-09-09 15:18:30
【问题描述】:
我需要通过 dblink 从“经典”数据库中检索“空间”数据库中的坐标 (x,y)。
这是我的 Oracle 版本: Oracle Database 11g 企业版 11.2.0.4.0 - 64 位生产
两个数据库之间的 dblink 工作正常。
我在空间数据库中创建了一个函数,它获取对象的 SGO_GEOMETRY 并返回 sdo_point.x => 通过 dblink 可以正常工作
现在我需要将当前 x 转换为另一个空间单元。 为此,我使用
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 得到了这个:
您的数据库连接已重置。任何待处理的事务或会话状态都已丢失。
起初,我以为我的 DBLINK 用户缺少某种授权,但 MDSYS 是 PUBLIC。 所以我尝试了 MDSYS.SOD_CS 包中的另一个函数,它可以工作:
w_test := MDSYS.SDO_CS.tfm_axis_orientation_to_wkt('test'); 返回 1;
似乎只有使用 MDSYS.SDO_GEOMETRY 参数的函数失败了。
您知道为什么以及应该做什么吗?
【问题讨论】:
标签: oracle function package spatial dblink