CÓMO

Notificar el orden de conciliación recomendado mediante SQL en Oracle

Last Published: October 11, 2024

Descripción

Las instrucciones proporcionadas describen cómo producir el orden de conciliación recomendado mediante SQL en Oracle. El resultado de la consulta es el orden en que las versiones se deben conciliar con el sde. DEFAULT antes de realizar una compresión. Al conciliar las versiones en el orden devuelto por la consulta, permite que el comando de compresión mueva tantas filas como sea necesario de cada tabla delta de clase versionada a las tablas base.

El uso del enfoque SQL es el mismo que si se utiliza la interfaz IVersionedWorkspace2::RecommendedReconcileOrder de ArcObjects para obtener una enumeración de nombres de versión.

Solución o solución alternativa

Es necesario crear una tabla temporal global y un procedimiento almacenado, así como ejecutar una instrucción SQL para devolver la lista de versiones en el orden de conciliación recomendado.

Note:
The steps should be performed by the sde administrative user in SQL*Plus.
  1. Cree la tabla temporal global que utilizará el procedimiento almacenado para registrar el valor de state_id y de state_id antecesor común de cada versión.

    Quite la tabla version_order, si ya existe.
SQL> DROP TABLE version_order;
DROP TABLE version_order
*
ERROR at line 1:
ORA-00942: table or view does not exist
  1. Cree la tabla temporal global.
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. Cree el procedimiento almacenado 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. Ejecute el procedimiento almacenado y consulte la tabla temporal global para generar el pedido de conciliación recomendado.
EXEC sde.common_ancestor_exe;

PL/SQL procedure successfully completed.
  1. Ejecute la siguiente instrucción SQL, que devuelve el propietario y el nombre de cada versión en función del orden de conciliación recomendado.
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

A continuación, las versiones deben conciliarse con ArcGIS con la versión DEFAULT. Por cada versión conciliada, se moverán más filas de las tablas delta a las tablas base.

Id. de artículo: 000010376

Obtenga soporte con IA

Resuelva su problema rápidamente con el chatbot de inteligencia artificial de soporte de Esri.

Empieza a chatear ahora

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Empieza a chatear ahora

Ir a opciones de descarga