Bearbeiten von versionierten Daten in Oracle mit SQL
Sie können versionierte Daten in einer Geodatabase in Oracle auf zwei Weisen bearbeiten: durch Bearbeiten einer benannten Version über eine versionierte Sicht oder durch Bearbeiten der DEFAULT-Version über eine versionierte Sicht. Unter Kurzer Überblick über das Bearbeiten von versionierten Daten mit SQL finden Sie eine Beschreibung eines jeden Bearbeitungsmodells.
In den meisten Fällen verwenden Sie nur ein Bearbeitungsmodell. Es ist jedoch möglich, beide Modelle am gleichen Standort zu verwenden. Daher wird in diesem Workflow erklärt, wie beide Modelle verwendet werden, damit Sie wissen, wie Sie zwischen beiden wechseln können. Wenn Sie nur ein Modell verwenden, lesen Sie den Abschnitt zum Bearbeitungsmodell, das Sie verwenden möchten.
Bearbeiten der DEFAULT-Version
Sie können SQL verwenden, um eine Verbindung mit der DEFAULT-Version herzustellen und eine versionierte Sicht zu bearbeiten. Sie müssen keine Editiersitzung öffnen. Wenn Sie mit dem Bearbeiten beginnen, wird automatisch eine Verbindung mit dem aktuellen Status der DEFAULT-Version hergestellt.
Sie sollten nach jeder vorgenommenen Bearbeitung bestätigen, um zu vermeiden, dass andere Benutzer daran gehindert werden, auf die Delta-Tabellen der Tabelle oder Feature-Class zuzugreifen.
In den folgenden Schritten wird eine versionierte Sicht (blic_vw) bearbeitet. Bearbeitungen dieser Sicht werden in die Delta-Tabellen der versionierten Tabelle "blic" geschrieben. Da es sich nur um wenige Bearbeitungen handelt, werden diese in der DEFAULT-Version durchgeführt.
- Stellen Sie von einem SQL-Client eine Verbindung mit der Datenbank her. Stellen Sie sicher, als Benutzer mit Berechtigungen zum Bearbeiten des Datasets und der versionierten Sicht eine Verbindung herzustellen.
-
Nehmen Sie die erste Änderung an der versionierten Sicht mithilfe von SQL vor.
In diesem Beispiel wird eine vorhandene Zeile aktualisiert, um den Namen des Eigentümers der Eigenschaft zu ändern.
UPDATE blic_vw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- Bestätigen Sie die Bearbeitung.
COMMIT;
-
Nehmen Sie die nächste Bearbeitung vor.
Einer Tabelle wird über die versionierte Sicht ein neuer Datensatz hinzugefügt. Die Tabelle enthält die Spalte (Position) "ST_Geometry".
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'Moe Esposito', SYSDATE, sde.ST_PointFromText ('point (0.0125662 0.0046711)', 12));
Tipp:
In der INSERT-Anweisung ist kein Objekt-ID-Wert angegeben. Die versionierte Sicht ruft automatisch die nächste verfügbare Objekt-ID ab und fügt sie für die Zeile ein.
- Bestätigen Sie die Bearbeitung.
COMMIT;
Bearbeiten einer benannten Version
Ihnen werden mehrere Aktualisierungen für die Feature-Class "blic" zugewiesen. Daher beschließen Sie, dass es günstig wäre, die Bearbeitungen in einer benannten Version vorzunehmen.
Die gespeicherten Prozeduren und ihre Syntax, mit denen Sie eine benannte Version der Geodatabase bearbeiten, lauten wie folgt:
Gespeicherte Prozedur | Zweck | Syntax und Beschreibung |
---|---|---|
version_user_ddl.create_version | Erstellen einer benannten Geodatabase-Version. Wenn Sie benannte Versionen (andere Versionen als DEFAULT) bearbeiten, bearbeiten Sie immer eine eigene, separate Version. Mehrere Editoren können nicht die gleiche benannte Version mit versionierten Sichten bearbeiten. | EXEC {sde | <schema owner>}.version_user_ddl.create_version ('<parent_version>', :<child_version_variable>, <name_rule>, <access>, '<description>') |
version_util.set_current_version | Festlegen von Geodatabase-Version und Status, auf die zugegriffen wird. Es wird auf den Status zugegriffen, auf den die Version zu dem Zeitpunkt verwiesen hat, zu dem Sie "set_current_version" ausgeführt haben. | EXEC {sde | <schema owner>}.version_util.set_current_version('<child_version>') |
version_user_ddl.edit_version | Starten und Beenden einer Editiersitzung für eine benannte Version. Bearbeitungen in der Transaktion werden immer dann bestätigt, wenn dieses Verfahren ausgeführt wird. | EXEC {sde | <schema owner>}.version_user_ddl.edit_version ('<child_version>',<1 or 2>) Geben Sie 1 an, um die Editiersitzung zu starten. Geben Sie 2 an, um sie zu beenden. |
Die Parameter in den Ausführungsanweisungen stellen Folgendes dar:
- {sde | <Schemabesitzer>} gibt an, welcher Benutzer Eigentümer des Verfahrens ist. Wenn Sie das Verfahren für die Master-SDE-Geodatabase ausführen, verwenden Sie "sde". Wenn Sie das Verfahren für eine Geodatabase im Schema eines anderen Benutzers ausführen, geben Sie den Namen dieses Benutzers an.
- "<parent_version>" die Version ist, aus der Ihre Version erstellt wird.
- "<child_version>" ist die benannte Version, die Sie zum Bearbeiten erstellen.
- "<name_rule>" gibt an, ob der für die Version angegebene Name entsprechend der Vorgabe übernommen werden soll (2) oder ob ein eindeutiger Name erstellt werden soll, falls ein Name doppelt angegeben wird (1).
- "<access>" ist die Berechtigungsstufe der Version: 0 = "Privat", 1 = "Öffentlich", 2 = "Geschützt".
- "<description>" eine Textbeschreibung der Child-Version ist.
In den folgenden Schritten werden aus DEFAULT die benannte Version "myedits12111" erstellt und Bearbeitungen in dieser Version über die versionierte Sicht "blic_vw" durchgeführt.
-
Öffnen Sie einen SQL-Client, und deklarieren Sie eine Variable, um die Version zu speichern, die Sie im nächsten Schritt erstellen.
VARIABLE my_version NVARCHAR2(10); EXEC :my_version := 'myedits12111';
In diesem Beispiel ist "my_version" der Variablenname, "NVARCHAR2(10)" ist der Datentyp der Variable, und "myedits12111" ist der Versionsname.
-
Erstellen Sie eine neue Version, in der Sie die Bearbeitungen vornehmen.
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');
-
Legen Sie die Version für die Editiersitzung auf die soeben erstellte Child-Version fest.
EXEC sde.version_util.set_current_version('myedits12111');
-
Starten Sie eine Editiersitzung, indem Sie die gespeicherte Prozedur "version_user_ddl.edit_version" ausführen und 1 angeben.
"1" bedeutet, dass eine Editiersitzung gestartet wird.
EXEC sde.version_user_ddl.edit_version('myedits12111',1);
- Nehmen Sie mit SQL einige Bearbeitungen der versionierten Sicht vor.
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'V. Nay', SYSDATE, sde.ST_PointFromText ('point (0.0125699 0.0046700)', 12)); UPDATE blic_vw SET phone1='555.111.2345', phone2='555.111.6789' WHERE propowner = 'Tella Chomsky'; UPDATE blic_vw SET exp_date = '2020-06-30' 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;
- Bestätigen Sie die Bearbeitungen.
COMMIT;
-
Beenden Sie die Editiersitzung, indem Sie die gespeicherte Prozedur "version_user_ddl.edit_version" ausführen, jetzt aber den Wert 2 angeben.
"2" bedeutet, dass eine Editiersitzung beendet wird.
EXEC sde.version_user_ddl.edit_version('myedits12111',2);
Tipp:
Sie können nur eine Version pro Editiersitzung bearbeiten. Wenn Sie z. B. eine zweite Version (z. B. "mynewedits") bearbeiten möchten, müssen Sie die Editiersitzung für "myedits12111" schließen, wie in diesem Schritt gezeigt wird. Dann können Sie "set_current_version" ausführen, um auf die Version "mynewedits" zu verweisen und durch Ausführen von "edit_version" eine Editiersitzung für diese zu starten.
Wechseln vom Bearbeiten einer benannten Version zurück zur DEFAULT-Version
Wenn Sie zum direkten Bearbeiten der DEFAULT-Version zurückkehren müssen (wenn Ihnen Ihr Vorgesetzter z. B. mitteilt, dass anderen Benutzern am Standort eine bestimmte Bearbeitung sofort angezeigt werden muss), können Sie "version_user_ddl.set_default" ausführen, um wieder zum Bearbeiten der DEFAULT-Version zu wechseln. Die Bearbeitungen, die Sie an der DEFAULT-Version vorgenommen haben, werden anderen Benutzern mit einer Verbindung zur DEFAULT-Version angezeigt, sobald sie ihre Client-Verbindungen aktualisieren.
Die gespeicherte Prozedur und ihre Syntax, mit der Sie die DEFAULT-Version der Geodatabase bearbeiten, lautet wie folgt:
Gespeicherte Prozedur | Zweck | Syntax und Beschreibung |
---|---|---|
version_util.set_default | Zurückkehren zum Bearbeiten des aktuellen Status der DEFAULT-Version. Führen Sie diese Prozedur aus, wenn Sie eine benannte Version oder einen bestimmten Status der DEFAULT-Version bearbeitet haben, aber zum Bearbeiten der aktuellen Version von DEFAULT zurückkehren möchten. | EXEC {sde | <schema owner>}.version_user_ddl.set_default |
- Führen Sie an der SQL-Eingabeaufforderung die Prozedur "set_default" aus.
EXEC sde.version_util.set_default;
Bei der Sitzung wird jetzt festgelegt, dass der aktuelle Status bearbeitet wird, auf den die DEFAULT-Version verweist.
- Bearbeiten Sie die versionierte Sicht "blic_vw".
INSERT INTO blic_vw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', SYSDATE, 'Chez Coiffure', sde.ST_PointFromText ('point (0.0125650 0.0046721)', 12));
- Bestätigen Sie die Bearbeitung.
COMMIT;
Bei anderen Clients, die auf den gleichen Status der DEFAULT-Version oder eines Status in ihrer Lineage verweisen, können deren Verbindungen aktualisiert und das neue Punkt-Feature angezeigt werden.
Abgleichen der Änderungen an der versionierten Version und Zurückschreiben dieser
Wenn das Bearbeiten in der benannten Version abgeschlossen ist, müssen Sie Konflikte mit ArcGIS abgleichen, prüfen und lösen sowie die Änderungen zurückschreiben. Dies kann in ArcGIS for Desktop mit dem Batch-Geoverarbeitungswerkzeug "Version abgleichen" oder einem Python-Skript durchgeführt werden. Weitere Informationen finden Sie in den folgenden Themen:

Wenn die Daten, die Sie bearbeitet haben, mit der Option zum Verschieben von Änderungen in die Basistabelle als versioniert registriert wurden, werden die Änderungen nach dem Abgleichen und Zurückschreiben in die Standardversion verschoben.
Sobald die Änderungen in die DEFAULT-Version zurückgeschrieben wurden, kann die benannte Version gelöscht werden. Die gespeicherte Prozedur und ihre Syntax, mit der Sie die benannte Version nach dem Abgleichen und Zurückschreiben zur DEFAULT-Version der Geodatabase löschen, lautet wie folgt:
Gespeicherte Prozedur | Zweck | Syntax und Beschreibung |
---|---|---|
version_user_ddl.delete_version | Löscht eine Geodatabase-Version. | EXEC {sde | <schema owner>}.version_user_ddl.delete_version('<child_version>') |
Im folgenden Beispiel wird "myedits12111" gelöscht, nachdem alle Änderungen abgeglichen und in die DEFAULT-Version zurückgeschrieben wurden:
EXEC sde.version_user_ddl.delete_version('myedits12111');