操作方法

操作方法:使用 Oracle 中的 SQL 语句报告建议的协调顺序

Last Published: October 11, 2024

描述

此处提供的说明描述了如何使用 Oracle 中的 SQL 语句生成建议的协调顺序。 查询的输出结果指示了在执行压缩操作之前,各版本与 sde.DEFAULT 版本进行协调的先后顺序。 通过按照查询结果所指示的顺序协调版本,可以通过压缩命令将版本化类的增量表中尽可能多的行移动到基表。

使用 SQL 方法的效果与使用 ArcObjects 界面 IVersionedWorkspace2::RecommendedReconcileOrder 获取版本名称枚举的效果相同。

解决方案或解决方法

为了获取建议协调顺序的版本列表,需要创建全局临时表和存储过程,并执行相应的 SQL 语句。

Note:
The steps should be performed by the sde administrative user in SQL*Plus.
  1. 创建一个全局临时表,用于存储过程中记录每个版本的 state_id 和共同祖先 state_id。

    如果 version_order 表已存在,请先将其删除。
SQL> DROP TABLE version_order;
DROP TABLE version_order
*
ERROR at line 1:
ORA-00942: table or view does not exist
  1. 创建该全局临时表。
SQL> CREATE GLOBAL TEMPORARY TABLE version_order (
2 owner VARCHAR2(32),
3 name VARCHAR2(64),
4 state_id NUMBER(38),
5 ca_state_id NUMBER(38))
6 ON COMMIT PRESERVE ROWS;

Table created.
  1. 创建名为 common_ancestor_exe 的存储过程。
CREATE OR REPLACE PROCEDURE common_ancestor_exe AS

CURSOR ver_list IS
SELECT name, owner, state_id
FROM sde.versions
WHERE name <> 'DEFAULT'
AND name NOT LIKE 'SYNC_%'
AND name NOT LIKE 'REP_CO_SYNC_%'
ORDER BY state_id;

default_id NUMBER;
default_lin NUMBER;
source_lin NUMBER;
common_ancestor_id NUMBER;

BEGIN

SELECT state_id, lineage_name INTO default_id, default_lin FROM sde.states WHERE state_id =
(SELECT state_id FROM sde.versions WHERE name = 'DEFAULT' AND owner = 'SDE');

DELETE FROM version_order;

FOR ver_info IN ver_list LOOP

SELECT lineage_name INTO source_lin FROM sde.states WHERE state_id = ver_info.state_id;

SELECT MAX(lineage_id) INTO common_ancestor_id FROM
(SELECT lineage_id FROM sde.state_lineages WHERE lineage_name = default_lin AND lineage_id <= default_id
INTERSECT
SELECT lineage_id FROM sde.state_lineages WHERE lineage_name = source_lin AND lineage_id <= ver_info.state_id);

IF common_ancestor_id < default_id THEN
INSERT INTO version_order VALUES (ver_info.owner, ver_info.name, ver_info.state_id, common_ancestor_id);
END IF;

END LOOP;

COMMIT;

END;
/
  1. 执行该存储过程,并查询全局临时表,生成建议的协调顺序。
EXEC sde.common_ancestor_exe;

PL/SQL procedure successfully completed.
  1. 执行以下 SQL 语句,它将根据建议的协调顺序返回每个版本的所有者和名称。
SQL> SELECT owner, name 
2 FROM version_order
3 ORDER BY ca_state_id, state_id;

OWNER NAME
------------ --------------
RANDY REV_6847258
CHRIS REV_7019237
CLARE REV_7069544
LUCY REV_7043793
SUSAN REV_7069206

接下来,应在 ArcGIS 中将这些版本与 DEFAULT 版本进行协调。 每协调一个版本,就会有更多行从增量表移动到基表。

文章 ID: 000010376

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

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

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项