操作方法

操作方法:在 Oracle 中使用 SQL 将值插入企业级地理数据库版本化视图中的全局 ID 或 GUID 列中

Last Published: November 11, 2020

摘要

提供的说明介绍了如何针对 Oracle 使用结构化查询语言 (SQL) 将值插入企业级地理数据库版本化视图的全局 ID 或全局唯一标识符 (GUID) 列中。

过程

全局 ID 和 GUID 数据类型可存储注册表样式的字符串,该字符串包含用大括号括起来的 36 个字符。 这些字符串用于唯一识别单个地理数据库中和跨多个地理数据库的要素或表行。 这是在单向和双向地理数据库复制中追踪要素以及在关系或者需要全局唯一标识符的任何应用程序中使用要素的方式。

在某关系中,如果“全局 ID”字段是原始键,则 GUID 字段必须为目标键。 通过右键单击 ArcCatalog,然后单击“添加全局 ID”,即可将全局 ID 添加到该要素类。 地理数据库将自动保留这些值。 在 ArcCatalog 中创建 GUID 字段并保留其值。

在使用 SQL 将行插入包含“全局ID”列的版本化视图中时,需要为“全局 ID”列提供唯一 GUID 值。

注: 有关全局 ID、GUID 和地理数据库复制的详细信息,请参阅“相关信息”部分中的 ArcGIS Desktop 帮助。
提供的示例特定于 Oracle;但是步骤类似于其他受支持的数据库。
  1. 以 SDE 用户身份进行登录时,请执行以下 SQL 在关系数据库管理系统 (RDBMS) 中创建一个函数以生成 GUID。

    该函数将使用 Oracle SYS_GUID 函数创建 GUID,并将结果解析为 Microsoft 未压缩或标准 GUID 格式。
CREATE OR REPLACE FUNCTION GDB_GUID RETURN NCHAR IS guid NCHAR (38); BEGIN guid := upper(RAWTOHEX(SYS_GUID())); RETURN '{'||substr(guid,1,8)||'-'||substr(guid,9,4)||'-'||substr(guid,13,4)||'-'||substr(guid,17,4)||'-'||substr(guid,21,12)||'}'; END; /
  1. 以 SDE 用户以外的用户身份进行登录时,将以 SDE 用户身份授予该函数的权限以执行该函数。
grant execute on gdb_guid to public;
  1. 创建版本化视图。
"geodatabase administrator" table -o create_mv_view -T parcels_v -t parcels -i <端口> -u <用户> -p <密码>
注: 有关在企业级地理数据库中创建和使用版本化视图的详细信息,请参阅 ArcGIS Desktop 帮助。
  1. 查找从中创建了视图的版本化要素类的 REGISTRATION_ID。
select registration_id,table_name from sde.table_registry where table_name='PARCELS'; REGISTRATION_ID TABLE_NAME --------------- --------------------- 113 PARCELS
  1. 对于空间几何类型,查找从中创建了视图的版本化要素类的空间参考 ID (SRID)。
select srid from sde.st_geometry_columns where table_name='PARCELS' and owner='USER1'; SRID ---------- 7
  1. 创建一个新版本以编辑版本化视图。 如果您使用现有版本,请跳过此步骤或转至下一步。

    与在 ArcGIS 编辑会话中编辑版本化数据不同,不会使用这些编辑内容进行任何内部版本协调。 因此,强烈建议不要使用版本化视图来编辑默认版本或者其他用户可能同时编辑或协调的任何版本,因为将不会检测到任何冲突。 相反,应创建一个版本,专门用于使用版本化视图进行编辑。

    要创建一个新版本:
    创建一个新版本。 variable mvvers nvarchar2(97); exec :mvvers := 'PARCELS_42'; exec sde.version_user_ddl.create_version('SDE.DEFAULT',:mvvers,sde.version_util.C_take_name_as_given,sde.version_util.C_version_public,'Parcels WorkOrder 42 Version');
  2. 以版本化表所有者的身份将记录插入版本化视图中。
注: 有关在企业级地理数据库中使用版本化视图进行编辑的详细信息,请参阅 ArcGIS Desktop 帮助。
在以下示例中:
“USER1”是版本化表的所有者,“113”是在以上步骤 4 中找到的 registration_id。

对于空间几何类型,Spatial 列值取决于要插入的几何的类型以及要插入的点。 “7”是在以上步骤 5 中找到的版本化表的 SRID。
注: 有关 ST_GEOMETRY 类型以及在企业级地理数据库中插入几何的详细信息,请参阅 ArcGIS Desktop 帮助。
--设置要编辑的版本。 exec sde.version_util.set_current_version('USER1.PARCELS_42'); --启动编辑会话。 exec sde.version_user_ddl.edit_version('USER1.PARCELS_42',1); --执行所需插入。 --对于空间几何类型,可能会插入形状。 insert into parcels_v (objectid,globalid,shape) values (sde.version_user_ddl.next_row_id('USER1',113),sde.GDB_GUID,(sde.st_polygon ('polygon ((10000 520000, 100008889 55000, 1045545983 234280934, 10000 520000))',7))); --对于非空间几何类型(二进制、LOB 等),必须插入空形状: insert into parcels_v (objectid,globalid,shape) values (sde.version_user_ddl.next_row_id('USER1',113),sde.GDB_GUID, NULL); --停止编辑会话。 exec sde.version_user_ddl.edit_version('USER1.PARCELS_42',2); --提交编辑内容。 commit;

文章 ID:000009340

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容