使用ArcSDE SQL操作怎么获得新对象的objectid、GUID
arcgis9.3.1
现在大家很喜欢使用ArcSDE的SQL操作,这种方式在特殊的环境要求下显得比较方便,那么使用SQL操作最多的是读和写,而写最多的就是新建一个对象,那么翻译成SQL语言就是使用insert方式比较多,那么问题出来了,大家都知道ArcGIS的每一个要素类都是有ObjectID的,而且这个字段是不能重复的,那么当我要插入一个新的对象,这个ObjectID值怎么获得呢?
如果对ArcSDE或者是数据库比较熟悉的话,可能会将要素类(数据库层次就是表),表对象的序列找出来,其实ObjectID走的也是一个序列,然后获得nextValue即可,这种方式是不严谨的。
下一个可用对象 ID 不一定是最后所插入对象 ID 之后的下一个顺序编号。某些客户端应用程序的对象 ID 会进行批量分配,因此下一个可用对象 ID 的编号可能比最后使用的对象 ID 大许多。同样,批中任何未使用的对象 ID 会返回可用值池中,这意味着下一个可用对象 ID 值可能实际上小于最后插入的对象 ID 值。
那么我们该使用什么方式呢?
使用 sde.version_user_ddl 包中的 next_row_id 函数为对象 ID 生成新的唯一值。
next_row_id 函数使用两个参数:所有者和注册 ID。所有者是拥有该表的用户的名称。注册 ID 来自 TABLE_REGISTRY ArcSDE 系统表。利用表的所有者名称和注册 ID,可创建 SQL 语句来填充对象 ID 列。
操作步骤:
1:连接到Sqlplus
2:找到操作对象要素类对应的注册ID
- SELECT registration_id FROM sde.table_registry WHERE table_name = 'STREAMS' and owner = 'ENG2';
- REGISTRATION_ID 131
3:进行操作
- INSERT INTO eng2.streams (OBJECTID,NAME,SHAPE) VALUES(sde.version_user_ddl.next_row_id('ENG2', 131),
- 'TRANQUIL', sde.ST_GEOMETRY('linestring (750 150, 750 750)', 4) );
PS:如果用户需要GUID,也可以使用version_user_ddl.retrieve_guid函数进行创建
INSERT INTO mytable_vw (globalid,shape) VALUES (sde.version_user_ddl.retrieve_guid,(sde.st_polygon ('polygon ((10000 520000, 100008889 55000, 1045545983 234280934, 10000 520000))',4)));
10.1
通过ArcMap的编辑或导入功能向空间表插入数据时,新插入记录的ObjectId默认是自增的。但是通过SDE SQL向空间表中插入数据时,使用最大Objectid+1作为新记录的Objectid就可能会导致,在arcmap中编辑数据时Objectid重复。显然空间表中Objectid是通过一个序列生成的,不能简单通过最大Objectid+1的方式生成。
解决:在sde10.1中,使用sde库提供的函数sde.next_rowid(i_owner character varying, i_table_name character varying)生成当前记录的Objectid。经试验函数sde.next_rowid生成Objectid的策略和序列有所不同,但是使用函数sde.next_rowid能够避免Objectid重复的问题。
参考文章:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/006z000000w8000000/
使用ArcSDE SQL操作怎么获得新对象的objectid、GUID的更多相关文章
- SQL Server 2014 BI新特性(一)五个关键点带你了解Excel下的Data Explorer
Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企业中的自助式的商业智能变得更加的灵活,从而也降低了商业智能的门槛. 此文是在微软商业智能官方博客里 ...
- hibernate将本地SQL查询结果封装成对象
hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...
- ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
发了两天的时间来解决配置Oracle 监听器来使用SQL操作ST_Geometry的配置,网上搜索一大片,结果真正找到的只有方法可用,下面把这个方法我个人在总结下. ArcSDE10.1配置Oracl ...
- 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry
关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...
- ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误
ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误 1.测试环境说明 ArcSDE版本:10.2.2 Oracle版本:12.1.0.1和11. ...
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- legend---十、thinkphp中如何进行原生sql操作
legend---十.thinkphp中如何进行原生sql操作 一.总结 一句话总结:query方法和execute方法 Db类支持原生SQL查询操作,主要包括下面两个方法: query方法 quer ...
- mysql简单的sql操作语句
一,常用.简单的SQL操作语句 1.数据库操作: 1)创建数据库: create database database_name: 创建并设置字符编码 create database database_ ...
- sql操作数据库(1)-->DDL、DML、DQL
SQL 操作数据库 概念:结构化查询语言 Structured Quary Language 作用: 1.是一种数据库的查询的标准,对所有的数据库都支持 2.不同的数据库SQL语句可能有点不同 ( ...
随机推荐
- jenkins启动脚本
[root@localhost system]# cat /etc/init.d/jenkins #!/bin/sh # # SUSE system statup script for Jenkins ...
- UOJ #138. 【UER #3】开学前的涂鸦
Description 红包是一个有艺术细胞的男孩子. 红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦. 一开始,他在纸上画了一棵 n 个节点的树.但是他觉得这样的画太简单了,体现 ...
- bzoj 5372: [Pkusc2018]神仙的游戏
Description 小D和小H是两位神仙.他们经常在一起玩神仙才会玩的一些游戏,比如"口算一个4位数是不是完全平方数". 今天他们发现了一种新的游戏:首先称s长度为len的前缀 ...
- [转]angularjs之ui-grid 使用详解
本文转自:http://blog.csdn.net/qhkabuqiluo/article/details/52237710 最近一段时间在使用angularjs 然后就找到ui-grid 这个比较不 ...
- Vue-resource和Axios对比以及Vue-axios
vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios. vue-resource特点 vue-resource插件具有以下特点: 1,体积小 vue-resour ...
- HTML5特效~3D立方体旋转
先欣赏一下该特效的最终效果 本文源码参考自http://www.cnblogs.com/ECJTUACM-873284962/进行一点点优化,下面是对此特效原理上的的剖析. 该特效是基于Css3的一些 ...
- js小数转分数-近似递归
精度为小数两位,提高精度可把 toFixed(2)和100同时修改: function decimalsToFractional(decimals){ const formatDecimals = d ...
- mybatis整合spring的时候配置数据库信息文件properties注意事项
信息后面不能有空格 ,格式要xxx.driver xxx.url 这样
- 【转】46 个非常有用的 PHP 代码片段
1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言 ...
- npm全局安装失效修复
一.windows下 先查看npm包的默认安装目录 npm config get prefix 修改配置 npm config set prefix "nodeJs的安装目录" 二 ...