使用ArcSDE SQL操作怎么获得新对象的objectid、GUID

现在大家很喜欢使用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)));

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值