我需要通过dblink从“经典”数据库中检索“空间”数据库中的坐标(x,y)。
以下是我的Oracle版本: Oracle数据库11g企业版发行版11.2.0.4.0-64位生产
2数据库之间的dblink运行良好。
我在空间数据库中创建了一个函数,它获取对象的SGO_GEOMETRY,并返回通过dblink良好工作的sdo_point.x =>
现在,我需要在另一个空间单元中转换当前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是公开的。因此,我尝试了来自包MDSYS.SOD_CS的另一个函数,它起作用了:
MDSYS.SDO_CS.tfm_axis_orientation_to_wkt('test');w_test := 1;
只有使用MDSYS.SDO_GEOMETRY参数的函数似乎失败。
你知道为什么要做什么吗?
发布于 2019-04-19 18:52:04
我不太擅长Oracle,但我知道SDO_GEOMETRY不能在数据库链接上工作。
幸运的是,有一些解决办法,其中之一是WKT (众所周知的文本),它将几何表示为文本。有两个函数可以使用:
所以-看看这些能不能帮上忙。
关于更多的阅读,请看一下Alex的博客,描述您还能做些什么(http://www.tolon.co.uk/2012/09/geometry-objects-across-dblink/)。
https://stackoverflow.com/questions/55760373
复制相似问题