ArcSDE的SQL操作ObjectID获取方式
2015-05-29 17:52
405 查看
现在大家很喜欢使用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)));
如果对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)));
相关文章推荐
- OC学习篇之---Foundation框架中的NSObject对象
- file path: c++ #include vs. object-c #import
- Flask 中使用 JSON 响应页面的 Ajax 请求报错 TypeError: 'dict' object is not callable
- iOS Objective-C 身份证号码校验
- Objective-C中的self关键词
- Objective-C对象的申请空间与初始化
- WebService传输SoapObject数据出现 org.ksoap2.serialization.SoapObject cannot be cast to java.util.Vector的问题
- Java核心API -- 1(Object类)
- 浏览器提示Uncaught TypeError: object is not a function XXX onclick
- IOS开发系列—Objective-C之Foundation框架
- JQuery创建object 并自定义键、值(获取table中数据,封装成一个对象)
- UITableViewCell Property “icon” cannot be found in forward class object “DJWeiBo”
- 使用objection来模块化开发iOS项目
- 条款21:必须返回对象object时,不要返回其引用reference
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等
- BING : Binarized Normed Gradients for Objectness Estimation at 300fps 论文笔记
- Windows之SignalObjectAndWait
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Chapter12. Foundation Classes and selector in Objective-C
- oc中谓词的使用(NSPredicate)