使用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语句可能有点不同 ( ...
随机推荐
- resteay上传单个文件/多个文件到本地
代码如下: CADLocalControlle.java package com.xgt.controller; import com.xgt.common.BaseController; impor ...
- .net core 第二篇控制台程序项目初步学习
1. 使用vscode 创建一个控制台程序 创建项目默认创建的项目名称为父级文件夹名称 后面学习下创建的命令各个参数说明 运行项目dotnet run 其他命令SDK 命令:add 将包或引用添加到 ...
- spring 代理
java动态代理实现 1. Java自带的动态代理,反射生成字节码 2. Cglib调用asm生成子类 spring 中代理实现 1. 如果类实现了接口,使用java动态代理 2. 没有实现接口,使用 ...
- es入门教程
因为项目可能会用到es保存一些非结构化的数据,并从中检索数据.对es调研了一下 从官网:https://www.elastic.co/downloads下载,解压即安装. 进入解压目录,执行bin目录 ...
- Python 爬虫的集中简单方式
- div 旋转
-webkit-transform:rotate(120deg); -moz-transform:rotate(120deg); -o-transform:rotate(120deg); /* fil ...
- 我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持
网站地址:http://i.youku.com/gisoracle第一个学习视屏:ArcGIS文本文件,excel文件生成点操作http://v.youku.com/v_show/id_XNzM3Nz ...
- (C#) 表达式树
需求是将一个string 表达式 转换成 逻辑 表达式 并得到结果. 例如: bool result = (key1==val1) || (key2!=val2) && (key3== ...
- Oracle数据库中设置表字段为自动序列
--创建序列 increment ; --创建触发器 create or replace trigger zonecode_trigger before insert on org_HospitalZ ...
- content provider其中操作文件的函数
此类函数还是有杀伤力的 1.openAssetFile(Uri uri, String mode)This is like openFile(Uri, String), but can be impl ...