Fly

 

SuperMap关联外部数据库

在我们使用Oracle数据库时,空间数据和业务数据通常是放在不同的库中,在处理时又需要通过业务数据来对空间数据进行相应处理,这个时候我们希望能够将二者联系起来.看到有用户曾这么用过,将方法分享一下:

在Oracle中建立四个用户map1,map2,map3,map4,通过Deskpro在前三个数据源中创建数据集(测试时采用的是点数据集,且三个数据集的记录数一致,为10),分别为aa,bb,cc,后两个数据集中各有一个自己的字段,字段名称分别为bb,cc,map4是一个业务属性表,在此用户下存储了一个普通的业务信息表(记录数也为10),现希望将map2,map3,map4中的信息全部与map1中的空间数据关联.操作如下:

1.首先以map2身份登录SQLPLUS,将此用户下的选择及更新权限赋给map1,

grant select,update on bb to map1;(前面说过了bb是map2用户对应数据源下的数据集)

commit;

之后对map3,map4做同样的操作,

grant select,update on cc to map1;

commit;

grant select,update on dd to map1;(虽然map4不是SuperMap数据源,但无任何影响)

commit;

2.以map1身份登录SQLPLUS,创建视图

create view vw_test as
select aa.SmID,
aa.SmX,
aa.SmY,
o2.bb as bb,
o3.cc as cc,
o4.dd as dd
from aa,map2.bb o2,map3.cc o3,map4.dd o4
where aa.SmID=o2.SmID and aa.SmID=o3.SmID and aa.SmID=o4.ID;

在创视图时,可能会提示权限不够,这个时候请赋予map1管理员的权限

3.修改SuperMap系统表

在创建了视图之后,可以在视图中看到四个用户下相应表的信息,但在SuperMap中还是无法使用,如果要在SuperMap中使用此视图,最好的方式莫过于在map1数据源下创建一个包含视图所有信息的数据集,接下来就实现这个吧。

首先改一下SmRegister表,大家都知道,在SmRegister表中一条记录对应一个数据集,要想在map1数据源下创建一个包含视图所有信息的数据集,这里我们就需要添加一条记录,下面将需要注意的几个字段值提出来,其它字段值可以暂时忽略

SMDATASETID肯定是在之前最大SMDATASETID的基础上加1

SMDATASETNAME这个名字可以任意,是数据集的名称

SMTABLENAME此处为视图的名称,也就是vw_test

SMDATASETTYPE此处为创建的数据集的类型,可以是多个类型,在前面存在SMX和SMY两个字段,所以此处可以为点数据集也可为属性表数据集,值分别为1和0.测试时是以点数据集为例,其它数据集均可,如果是其它类型数据集,需要在创建视图时将系统字段全部拷贝过去,另外,在SmRegister表中将相关信息填齐,线面数据集比点的信息要多,不能漏掉。

SMRECORDCOUNT此处为视图中的记录数,之前几个数据集中的记录都为10,所以此处也为10

SMLASTUPDATE以下三个都需要填一下,按照其它数据集填一下时间就可以了

SMCREATETIME

SMLASTUPDATETIME

SMCREATOR这个就填map1吧

在设置完SmRegister表后,我们还需要设置一下SMFIELDINFO这个系统表,因为所有数据集中的字段信息都是存储在这个表中的,可按照aa数据集的样式,在SMFIELDINFO中添加vw_test对应的数据集的信息,SMDATASETID与SmRegister表中的对应。

4.更改完系统表后,我们可以刷新一下Deskpro中的数据源,此时就可以看到我们创建的数据集了。

 

 

posted on 2009-06-01 15:57  Emily_Fly  阅读(700)  评论(0编辑  收藏  举报

导航