Oracle业务表和视图在SuperMap中的应用

作者:皇皇

一、 业务表和视图跟数据集表的不同
SuperMap中Oracl数据是通过Oracl数据源(Datasource:是存储空间数据的场所)统一管理的,所以客户直接在数据库里面创建的业务表和视图就无法在打开的Oracl数据源里面查看到。
用SuperMap iDesktop 7C打开Oracl数据源,可以查看到点数据集Capital,但无法找到业务表,如图一。
Oracle业务表和视图在SuperMap中的应用_第1张图片
图一
在PL/SQL工具中,用Oracl数据源相同的用户打开数据库,可以查询到业务表BUSINESSTABLE1和BUSINESSTABLE1, 如图二。
Oracle业务表和视图在SuperMap中的应用_第2张图片
图二

二、 关联业务表或者视图做专题图
虽然数据源里面找不到业务表,但是我们依然可以在SuperMap中使用。
下面我们用业务表BUSINESSTABLE1的COUNTRY_CH字段值给点数据集Capital制作标签专题图为例,给大家演示如何在SuperMap中使用业务表。
1. 关联业务表制作标签专题图
通过SQL语句”select * from BUSINESSTABLE1”查询可以看见业务表BUSINESSTABLE1的内容: COUNTRY_CH字段的值;
Capital表和业务表BUSINESSTABLE1的关联字段是smid。如图三。
Oracle业务表和视图在SuperMap中的应用_第3张图片
图三
以下代码示范如何用关联字段smid构造一个连接信息类,用业务表的COUNTRY_CH字段值制作标签专题图。结果如图四。

public void JoinItemSample()
        {
            // 从数据源里得到名为 “Capital”的数据集
            Dataset dataset = workspace.Datasources[0].Datasets["Capital"];
            // 构造连接信息类对象,获得用于连接的表名
            JoinItem joinitem = new JoinItem();
            // 设置连接信息类的属性
            String  foreignTableName = "BUSINESSTABLE1"; 
            joinitem.ForeignTable = foreignTableName;
            joinitem.JoinFilter = "Capital.smid =" + foreignTableName + ".smid";
            joinitem.JoinType = JoinType.LeftJoin;
            joinitem.Name = "连接";
            // 设置连接信息集合类,将连接信息加入到连接信息集合中
            JoinItems joinitems = new JoinItems();
            joinitems.Add(joinitem);
            QueryParameter queryParameter = new QueryParameter();
            queryParameter.JoinItems = joinitems;
            //生成默认的标签专题图
            ThemeLabel themeLabel = new ThemeLabel();
            //设置表达式
            themeLabel.LabelExpression = foreignTableName +".COUNTRY_CH";
            //添加标签图层
            Layer layerThemeLable = this.mapControl.Map.Layers.Add(dataset, themeLabel, true);
            layerThemeLable.DisplayFilter = queryParameter;
            mapControl.Map.Refresh();
        }

Oracle业务表和视图在SuperMap中的应用_第4张图片
图四
2. 关联视图做专题图
如果我们用到的数据不在同一张业务表,就需要先把业务表按照要求创建视图再用上面的方法在SuperMap中使用。
以下示范如何把两张业务表用SQL语句创建视图,然后用视图制作标签专题图。
要求:是把业务表BUSINESSTABLE1的COUNTRY_CH字段值和业务表BUSINESSTABLE2的CAPITAL_CH字段值组成一个字段值VWNAME,用以创建标签专题图。
创建视图的SQL语句:
create view vw_CAPITAL as select BUSINESSTABLE1.SMID, (BUSINESSTABLE1.COUNTRY_CH || BUSINESSTABLE2.CAPITAL_CH) as vwname from BUSINESSTABLE1 join BUSINESSTABLE2 on BUSINESSTABLE1.Smid=BUSINESSTABLE2.SMID;
Oracle业务表和视图在SuperMap中的应用_第5张图片
业务表BUSINESSTABLE1

业务表BUSINESSTABLE2
Oracle业务表和视图在SuperMap中的应用_第6张图片
创建的视图vw_CAPITAL
创建的视图vw_CAPITAL使用方法和业务表一样。结果如图五

三、 关联业务表或者视图进行SQL查询
除了制作专题图之外,我们还可以关联外部表和视图进行查询
以下代码示范如何构造一个连接信息类,关联视图进行SQL查询。

JoinItem joinitem = new JoinItem();
String foreignTableName = "vw_CAPITAL";
// 设置连接信息类的属性
joinitem.ForeignTable = foreignTableName;
joinitem.JoinFilter = "Capital.smid=" + foreignTableName + ".smid";
joinitem.JoinType = JoinType.LeftJoin;
joinitem.Name = "连接";
// 设置连接信息集合类,将连接信息加入到连接信息集合中
JoinItems joinitems = new JoinItems();
joinitems.Add(joinitem);
// 设置查询参数
QueryParameter parameter = new QueryParameter();
parameter.JoinItems = joinitems;//连接外部表
parameter.CursorType = CursorType.Static;
parameter.HasGeometry = false;
parameter.ResultFields = new String[] { "Capital.*",foreignTableName + ".vwname" };
Recordset rec = dtv_C.Query(parameter);

查询结果保存在Recordset里面,再用于其他操作,业务表查询方法相同。我们把查询结果用表格展示出来。未关联视图时SQL查询结果如图六,关联视图时SQL查询结果如图七。
Oracle业务表和视图在SuperMap中的应用_第7张图片
图六
Oracle业务表和视图在SuperMap中的应用_第8张图片
图七

注意:做以上操作首先保证这些表格都在同一个用户下,再者需要有关联字段。

你可能感兴趣的:(oracle,数据库,数据,supermap,业务表)