geodatabase中如何获取feature class的ObjectID
2015-10-14 21:59
731 查看
ArcGIS geodatabase数据库中,所有的空间数据表(feature class)都带有objectid字段,该字段是ArcGIS自动创建和维护的主键字段。在一个feature class中,该字段的只不允许为空或重复。当我们在应用程序中,通过SQL的方式往feature class表中插入记录或将一个feature class的数据迁移到另一个feature class表中时,如何自动生成objectid字段的值,保证唯一性,是我们经常遇到的问题。 以Oracle geodatabase为例,Arcgis SDE用户下提供了一个函数专门用于生成objectid的值。该函数的用法如下:
.next_rowid (
,
该函数有两个入参,分别为:
table owner为我们所要生产objectid值得feature class所在的数据库用户名。
table name为我们要生产objectid值得feature class名称。
函数返回Integer类型的objectid值,该值保证是和该表中现有记录的objectid值不存在重复。
比如,我们需要将一个feature class表中的记录插入到另一个feature class中,可以一通过如下SQL语句实现:
INSERI INTO c_cblseg_l_backup(objectid, g3e_fid,name,code,shape)
SELECT sde.next_rowid(‘shtfm’,’c_cblseg_l_backup’) objectid,
g3e_fid,name,code,shape
FROM c_cblseg_l_1
INSERI INTO c_cblseg_l_backup(objectid, g3e_fid,name,code,shape)
SELECT sde.next_rowid(‘shtfm’,’c_cblseg_l_backup’) objectid,
g3e_fid,name,code,shape
FROM c_cblseg_l_2
通过此方式,可以保证两句INSERT INTO语句执行后,所插入到c_cblseg_l_backup表中的objectid字段值不会重复。即使在c_cblseg_l_1和c_cblseg_l_2中的数据objectid值都是从1开始编号的,即存在重复的情况。
另外,需要注意的是,使用此函数的表,一定是在ArcGIS geodatabase中注册的feature class(通过ArcMap创建的feature class即为geodatabase中注册的表。),未注册的表使用此函数,会如下报错。
INSERT INTO webman.logins (id, l_name)
VALUES
(sde.gdb_util.next_rowid(‘WEBMAN’, ‘LOGINS’), ‘maplebutter’);
(sde.gdb_util.next_rowid(‘WEBMAN’, ‘LOGINS’), ‘maplebutter’);
*
ERROR at line 3:
ORA-20220: Class WEBMAN.LOGINS not registered to the Geodatabase.
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- 分割超大Redis数据库例子
- 重装主控服务器后,数据库连接失败的解决办法:请正确还原数据库。