使用 SQL 编辑 Informix 中的版本化数据
可以用以下两种方式在 IBM Informix 的地理数据库中编辑版本化数据:通过版本化视图编辑命名版本,或通过版本化视图编辑 DEFAULT 版本。有关每种编辑模式的描述,请参阅利用 SQL 编辑版本化数据的快速浏览。
大多数情况下,您将仅使用一种编辑模式。但可以在同一个站点使用两种模式;因此,本工作流将介绍如何使用这两种模式,这样您可以了解如何在两种模式间转换。如果仅使用一种模式,请阅读特定于要使用的编辑模式的部分。
编辑 DEFAULT 版本
可以使用 SQL 连接到 DEFAULT 版本并编辑版本化视图。不必打开编辑会话。当开始编辑时,会自动连接到当前状态的 DEFAULT 版本。
您应该在每次编辑后进行提交,以免阻止其他用户访问表或要素类的增量表。
在以下步骤中,将编辑一个版本化视图 (blic_vw)。对该视图所做的编辑将写入 blic 版本化表的增量表中。由于仅有少量编辑,所以将在 DEFAULT 版本中进行编辑。
- 从 SQL 客户端连接到数据库。确保以具有编辑数据集和版本化视图的权限的用户身份进行连接。
-
使用 SQL 对版本化视图执行第一次编辑。
在本例中,对现有行进行更新以更改属性所有者名称。
UPDATE blic_vw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- 提交编辑。
COMMIT;
-
执行下一个编辑。
新记录通过版本化视图添加到表中。
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'Moe Esposito', CURRENT DATETIME, sde.ST_PointFromText ('point (0.0125662 0.0046711)', 12));
提示:在 INSERT 语句中未指定对象 ID 值;版本化视图会自动获取下一个可用对象 ID,然后为该行插入 ID。
- 提交编辑。
COMMIT;
编辑命名的版本
您需要对 blic 要素类进行一系列更新,所以决定在命名版本中进行编辑是一个好办法。
用于编辑地理数据库命名版本的函数及其语法如下:
功能 | 目的 | 语法和描述 |
---|---|---|
sde.create_version | 创建已命名的地理数据库版本。 如果正在编辑命名版本(除 DEFAULT 以外的版本),请始终编辑自己的独立版本;使用版本化视图时,多个编辑器无法编辑同一个命名版本。 | EXECUTE FUNCTION sde.create_version ('<parent_version>', '<child_version>', <name_rule>, <access>, '<description>') |
sde.set_current_version | 设置将访问的地理数据库版本和状态。 您将访问执行 set_current_version 时版本指向的状态。 | EXECUTE FUNCTION sde.set_current_version('<child_version>') |
sde.edit_version | 启动和结束针对命名版本的编辑会话。 无论何时执行此函数,都会提交事务中的编辑。 | EXECUTE FUNCTION sde.edit_version('<child_version>',1) 指定 1 启动编辑会话。指定 2 结束编辑会话。 |
执行语句中的参数表示如下含义:
- <parent_version> 是您创建版本时所依据的版本。
- <child_version> 是您所创建用于编辑的命名版本。
- <name_rule> 指示为版本指定的名称是否应采用给定名称 (2),或者在指定重复名称时是否创建唯一名称 (1)。
- <access> 是版本的权限级别:0 表示私有,1 表示公共,2 表示受保护。
- <description> 是子版本的文本描述。
在以下步骤中,将根据 DEFAULT 版本创建一个命名版本 (myedits12111),并通过 blic_vw 版本化视图在该版本中进行编辑。
- 从命令提示符创建用于执行编辑的新版本。
EXECUTE FUNCTION sde.create_version ('sde.DEFAULT', 'myedits12111', 1, 1, 'versioned view edit version');
- 将编辑会话的版本设置为刚刚创建的子版本。
EXECUTE FUNCTION set_current_version('myedits12111');
这会将编辑状态设置为 myedits12111 的当前状态。
- 通过执行 edit_version 函数并指定 1 来启动编辑会话。1 表示应启动编辑会话。
EXECUTE FUNCTION sde.edit_version('myedits12111',1);
- 从 SQL 客户端启动一个新事务以编辑 blic_vw。
- 使用 SQL 在版本化视图中执行一组编辑。
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'V. Nay', CURRENT DATETIME, sde.ST_PointFromText ('point (0.0125699 0.0046700)', 12)); UPDATE blic_vw SET (phone1,phone2) = ('555.111.2345','555.111.6789') WHERE propowner = 'Tella Chomsky'; UPDATE blic_vw SET exp_date = '2020-06-30 17:00:00' WHERE lid = 22903; UPDATE blic_vw SET location = sde.ST_PointFromText ('point (0.0125705 0.0046688)', 12)) WHERE lid = 8992; INSERT INTO blic_vw (codenum, propowner) VALUES (456, 'Anjo Badsu'); DELETE FROM blic_vw WHERE lid = 133;
- 提交编辑。
COMMIT;
- 通过调用 edit_version 存储过程并指定 2 来停止编辑会话2 表示应结束编辑会话。
EXECUTE FUNCTION sde.edit_version('myedits12111',2);
- 完成所有编辑操作后,通过 ArcGIS for Desktop 协调和提交编辑,然后删除在步骤 2 中创建的地理数据库版本。如果决定放弃所做的更改,则不必协调和提交编辑,直接删除在步骤 1 中创建的版本即可。
EXECUTE FUNCTION sde.delete_version('myedits12111');
提示:每次编辑会话仅可编辑一个版本。例如,如果您要编辑第二个版本(例如 mynewedits),则必须关闭 myedits12111 上的编辑会话,如该步骤所示。然后可以执行 set_current_version 指向 mynewedits 版本,再通过执行 edit_version 来启动编辑会话。
用单引号括起的文本是从字面上读的。因此,在引号标记中输入的文本必须与文本存储在数据库中的大小写情况相匹配(全大写、全小写或大小写混合)。
从编辑命名版本切换回编辑 DEFAULT
如果需要直接返回到编辑 DEFAULT 版本(例如,如果管理器通知您,站点的其他用户需要立即查看特定编辑),则可以执行 set_default 来切换回编辑 DEFAULT 版本。连接到 DEFAULT 的其他用户只要刷新其客户端连接,即可看到您对 DEFAULT 版本执行的编辑。
用于编辑地理数据库 DEFAULT 版本的函数及其语法如下:
功能 | 目的 | 语法和描述 |
---|---|---|
sde.set_default | 返回以编辑 DEFAULT 版本的当前状态。 如果您正在编辑一个命名版本或特定状态的 DEFAULT 版本,但想返回编辑当前状态的 DEFAULT 版本,则执行此函数。 | EXECUTE FUNCTION sde.set_default ( ) |
- 在 SQL 提示符处执行 set_default 函数。
EXECUTE FUNCTION sde.set_default();
会话现在即设置为编辑 DEFAULT 版本引用的当前状态。
- 编辑 blic_vw 版本化视图。
INSERT INTO blic_vw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', CURRENT DATETIME, 'Chez Coiffure', sde.ST_PointFromText ('point (0.0125650 0.0046721)', 12));
- 提交编辑。
COMMIT;
指向 DEFAULT 版本的同一状态或其谱系中任何状态的其他客户端可刷新其连接,从而查看新的点要素。
协调编辑内容并提交到命名版本
完成对命名版本的编辑后,必须使用 ArcGIS 查看、协调和解决冲突,并提交编辑。这可以在 ArcGIS for Desktop 中使用批量协调版本地理工具或 Python 脚本来实现。有关详细信息,请参阅以下主题:
如果编辑的数据已注册为版本并且选择了将编辑内容移动到基表的选项,则编辑内容在协调和提交到 DEFAULT 版本后将移动到基表中。
一旦将编辑内容提交到 DEFAULT 版本,即可删除命名版本。用于在协调并提交到地理数据库的 DEFAULT 版本后删除命名版本的函数及其语法如下:
功能 | 目的 | 语法和描述 |
---|---|---|
sde.delete_version | 删除地理数据库版本。 | EXECUTE FUNCTION sde.delete_version('<child_version>') |
以下示例将在所有编辑内容被协调并提交到 DEFAULT 版本后删除 myedits12111:
EXECUTE FUNCTION sde.delete_version('myedits12111');