要使用 SQL 编辑注册为版本化的(传统)数据,您必须使用版本化视图。您可以通过版本化视图编辑默认版本或指定版本。有关每种选项的说明,请参阅使用 SQL 编辑版本化数据概述。
大多数情况下,您将仅使用一种编辑模式。但可以在同一个站点使用两种模式;因此,本工作流将介绍如何使用这两种模式,这样您可以了解如何在两种模式间转换。如果仅使用一种模式,请阅读特定于要使用的编辑模式的部分。
编辑“默认”版本
您可以使用 SQL 连接到“默认”版本并编辑版本化视图。不必打开编辑会话。当开始编辑时,会自动连接到“默认”版本的当前状态。
您应该在每次编辑后进行提交,以免阻止其他用户访问表或要素类的增量表。
在以下步骤中,编辑了版本化视图 (blic_evw)。对该视图所做的编辑将写入 blic 版本化表的增量表中。由于仅有少量编辑,因此将在默认版本中进行编辑。
- 从 SQL 客户端连接到数据库。确保以具有编辑数据集和版本化视图的权限的用户身份进行连接。
- 使用 SQL 对版本化视图执行第一次编辑。
在本例中,对现有行进行更新以更改属性所有者名称。
UPDATE blic_evw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- 提交编辑。
COMMIT;
-
进行下一次编辑。
一条新记录会通过版本化视图添加到表中。表包含 ST_Geometry 列(位置)
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'Moe Esposito', SYSDATE, sde.ST_PointFromText ('point (0.0125662 0.0046711)', 12));
- 提交编辑。
COMMIT;
编辑命名版本
您需要对 blic 要素类进行一系列更新,所以决定在命名版本中进行编辑是一个好办法。
用于编辑命名版本的地理数据库的存储过程及其语法如下:
存储过程 | 用途 | 语法和描述 |
---|---|---|
version_user_ddl.create_version | 创建已命名的地理数据库版本。 如果正在编辑命名版本(除“默认”版本以外的版本),请始终编辑自己的独立版本;使用版本化视图时,多个编辑器无法编辑同一个命名版本。 | EXEC {sde | <schema owner>}.version_user_ddl.create_version ('<parent_version>', :<child_version_variable>, <name_rule>, <access>, '<description>') |
version_util.set_current_version | 设置将访问的地理数据库版本和状态。 您将访问执行 set_current_version 时版本指向的状态。 | EXEC {sde | <schema owner>}.version_util.set_current_version('<child_version>') |
version_user_ddl.edit_version | 启动和结束针对命名版本的编辑会话。 只要执行该过程,就会提交事务中的编辑内容。 | EXEC {sde | <schema owner>}.version_user_ddl.edit_version ('<child_version>',<1 or 2>) 指定 1 启动编辑会话。指定 2 结束编辑会话。 |
执行语句中的参数所表示的含义如下:
- {sde | <schema owner>} 表示拥有程序的用户。如果您执行主 sde 地理数据库的程序,请使用 sde;如果您以另一个用户方案执行地理数据库的程序,请指定用户名。
- <parent_version> 是版本创建时所基于的版本。
- <child_version> 是您所创建用于编辑的命名版本。
- <name_rule> 指示针对版本指定的名称是否应视为是给定的 (2),或者在指定了重复名称时是否应创建唯一名称 (1)。
- <access> 是版本的权限等级;0 表示私有,1 表示公有,2 表示受保护。
- <description> 是子版本的文本描述。
在以下步骤中,将根据“默认”版本创建一个命名版本 (myedits12111),并通过 blic_evw 版本化视图在该版本中进行编辑。
- 打开 SQL 客户端,然后声明一个变量来存储将在下一个步骤中创建的版本。
VARIABLE my_version NVARCHAR2(10); EXEC :my_version := 'myedits12111';
在此例中,mv_version 为变量名,NVARCHAR2(10) 为变量的数据类型,myedits12111 为版本名称。
- 创建用于执行编辑的新版本。
EXEC sde.version_user_ddl.create_version ('sde.DEFAULT', :my_version, sde.version_util.C_take_name_as_given, sde.version_util.C_version_private, 'versioned view edit version');
- 将编辑会话的版本设置为刚刚创建的子版本。
EXEC sde.version_util.set_current_version('myedits12111');
- 通过执行 version_user_ddl.edit_version 存储过程并指定 1 来启动编辑会话。
1 表示应启动编辑会话。
EXEC sde.version_user_ddl.edit_version('myedits12111',1);
- 使用 SQL 对版本化视图进行一系列编辑。
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'V. Nay', SYSDATE, sde.ST_PointFromText ('point (0.0125699 0.0046700)', 12)); UPDATE blic_evw SET phone1='555.111.2345', phone2='555.111.6789' WHERE propowner = 'Tella Chomsky'; UPDATE blic_evw SET exp_date = '2020-06-30' WHERE lid = 22903; UPDATE blic_evw SET location = sde.ST_PointFromText ('point (0.0125705 0.0046688)', 12)) WHERE lid = 8992; INSERT INTO blic_evw (codenum, propowner) VALUES (456, 'Anjo Badsu'); DELETE FROM blic_evw WHERE lid = 133;
- 提交编辑。
COMMIT;
- 通过执行 version_user_ddl.edit_version 存储过程并指定 2 来停止编辑会话。
2 表示应关闭编辑会话。
EXEC sde.version_user_ddl.edit_version('myedits12111',2);
从编辑命名版本切换回编辑“默认”版本
如果需要直接返回编辑“默认”版本(例如,管理员通知您站点上的其他用户需要立即查看特定的编辑),可以执行 version_user_ddl.set_default 以切换回编辑“默认”版本。只要连接到“默认”版本的其他用户刷新其客户端连接,就能看到您对“默认”版本所进行的编辑。
用于编辑“默认”版本的地理数据库的存储过程及其语法如下:
存储过程 | 用途 | 语法和描述 |
---|---|---|
version_util.set_default | 返回以编辑“默认”版本的当前状态。 如果您正在编辑一个命名版本或特定状态的“默认”版本,但想返回编辑当前状态的“默认”版本,则执行此过程。 | EXEC {sde | <schema owner>}.version_user_ddl.set_default |
- 在 SQL 提示符处执行 set_default 程序。
EXEC sde.version_util.set_default;
会话现在即设置为编辑“默认”版本引用的当前状态。
- 编辑 blic_evw 版本化视图。
INSERT INTO blic_evw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', SYSDATE, 'Chez Coiffure', sde.ST_PointFromText ('point (0.0125650 0.0046721)', 12));
- 提交编辑。
COMMIT;
指向“默认”版本同一状态或其他版本中任意状态的其他客户端可以刷新其连接并看到新的点要素。
协调编辑内容并提交到命名版本
完成对命名版本的编辑后,必须使用 ArcGIS 查看、协调和解决冲突,并提交编辑。这可以在 ArcGIS Desktop 中使用协调版本地理工具或 Python 脚本来实现。有关详细信息,请参阅以下主题:
将编辑内容提交到“默认”版本后,即可删除命名版本。用于在协调并提交到地理数据库的“默认”版本后删除命名版本的存储过程及其语法如下:
存储过程 | 用途 | 语法和描述 |
---|---|---|
version_user_ddl.delete_version | 删除地理数据库版本。 | EXEC {sde | <schema owner>}.version_user_ddl.delete_version('<child_version>') |
以下示例在协调所有编辑内容并将其提交到“默认”版本后,删除 myedits12111:
EXEC sde.version_user_ddl.delete_version('myedits12111');