Sie können die Structured Query Language (SQL) des Datenbankmanagementsystems (DBMS), die Datentypen und die Tabellenformate verwenden, um mit den in einer Geodatabase oder Datenbank gespeicherten Informationen zu arbeiten, bei denen der Datentyp "ST_Geometry" installiert ist. SQL ist eine Datenbanksprache, die Befehle für die Datendefinition und die Datenbearbeitung unterstützt.
Erfolgt der Zugriff auf die Daten über SQL, können externe Anwendungen die Tabellendaten verwenden, die von der Geodatabase bzw. Datenbank verwaltet werden. Bei diesen externen Anwendungen kann es sich um nicht räumliche Datenbankanwendungen oder benutzerdefinierte räumliche Anwendungen handeln, die in einer anderen Umgebung als ArcObjects entwickelt wurden.
Wenn Sie Daten in eine Geodatabase oder Datenbank über SQL einfügen bzw. die darin enthaltenen Daten bearbeiten, geben Sie eine COMMIT- oder ROLLBACK-Anweisung aus, nachdem die SQL-Anweisung ausgeführt wurde, um Änderungen entweder in die Datenbank zu übernehmen oder sie zu verwerfen. Dadurch werden Sperren für die Zeilen, Seiten oder Tabellen verhindert, die Sie bearbeiten.
Einfügen von ST_Geometry-Daten mit SQL
Sie können SQL verwenden, um räumliche Daten in eine Datenbank- oder Geodatabase-Tabelle einzufügen, die über eine ST_Geometry-Spalte verfügt. Zum Einfügen bestimmter Geometrietypen werden Konstruktorfunktionen für "ST_Geometry" verwendet. Sie können auch angeben, dass die Ausgabe bestimmter Funktionen für räumliche Operationen in einer vorhandenen Tabelle erfolgen soll.
Wenn Sie eine Geometrie mit SQL in eine Tabelle einfügen, müssen Sie Folgendes beachten:
- Sie müssen eine gültige Raumbezugs-ID (SRID) angeben.
- Um die Tabelle weiterhin mit ArcGIS verwenden zu können, darf das als ObjectID verwendete Feld nicht Null sein.
Raumbezugs-IDs
Die SRID, die Sie beim Einfügen einer Geometrie in eine Tabelle in Oracle angeben und die den räumlichen Datentyp "ST_Geometry" verwendet, muss in der Tabelle "ST_SPATIAL_REFERENCES" enthalten sein und einen identischen Datensatz in der Tabelle "SDE.SPATIAL_REFERENCES" besitzen. Die SRID, die Sie beim Einfügen einer Geometrie in eine Tabelle in PostgreSQL angeben, die den räumlichen Datentyp "ST_Geometry" verwendet, muss in der Tabelle "public.sde_spatial_references" enthalten sein. Ab ArcGIS 10.1 werden diese Tabellen vorab mit Raumbezügen und SRIDs ausgefüllt.
Die SRID, die Sie beim Einfügen einer Geometrie in eine Tabelle in SQLite angeben, die den räumlichen Datentyp "ST_Geometry" (ein geometryblob) verwendet, muss in der Tabelle "st_spatial_reference_systems" enthalten sein.
Wenn Sie einen benutzerdefinierten Raumbezug benötigen, der nicht in der Tabelle vorhanden ist, besteht die einfachste Möglichkeit darin, mithilfe von ArcGIS Desktop eine Feature-Class mit den gültigen Raumbezugswerten zu laden oder zu erstellen. Achten Sie darauf, dass die erstellte Feature-Class das Format "ST_Geometry" verwendet. Dadurch wird in Oracle ein Datensatz in den Tabellen "SDE.SPATIAL_REFERENCES" und "ST_SPATIAL_REFERENCES", in PostgreSQL ein Datensatz in der Tabelle "public.sde_spatial_references" bzw. in SQLite ein Datensatz in "st_aux_spatial_reference_systems_table" erstellt.
In Geodatabases können Sie eine Abfrage für die Tabelle "LAYERS" (Oracle) bzw. "sde_layers" (PostgreSQL) durchführen, um die SRID zu ermitteln, die dem Layer zugewiesen ist. Anschließend können Sie diese SRID zum Erstellen von Geometrietabellen und zum Einfügen von Daten mithilfe von SQL verwenden.
Alternativ können Sie der Tabelle "ST_SPATIAL_REFERENCES" bzw. "sde_spatial_references" einen Raumbezug über SQL hinzufügen. Weitere Informationen finden Sie unter Erstellen von Raumbezügen mit SQL.
Eine Erläuterung zu SRIDs und Raumbezugsystemen finden Sie unter Was ist eine SRID? und Raumbezüge.
ObjectIDs
Damit ArcGIS Daten abfragen kann, muss die Tabelle ein eindeutiges Kennungsfeld enthalten.
Mit ArcGIS erstellte Feature-Classes haben immer ein ObjectID-Feld, das als Kennungsfeld dient. Wenn Sie Datensätze mit ArcGIS in die Feature-Class einfügen, wird immer ein eindeutiger Wert in das ObjectID-Feld eingefügt. Das ObjectID-Feld in einer Geodatabase-Tabelle wird von ArcGIS verwaltet. Das ObjectID-Feld in einer Datenbanktabelle, die in ArcGIS erstellt wurde, wird vom DBMS verwaltet.
Wenn Sie Datensätze mit SQL in eine Geodatabase-Tabelle einfügen, müssen Sie die Funktion Next_RowID verwenden, um einen gültigen ObjectID-Wert abzurufen und einzufügen. Wenn Sie SQL zum Einfügen von Datensätzen in eine Datenbanktabelle verwenden, die in ArcGIS erstellt wurde, füllt das DBMS das ObjectID-Feld mit einem Wert aus.
Datenbanktabellen, die außerhalb von ArcGIS erstellt wurden, müssen über ein Feld (oder eine Gruppe von Feldern) verfügen, die ArcGIS als ObjectID verwenden kann. Wenn Sie den systemeigenen Datentyp für automatische Werterhöhung der Datenbank für das ID-Feld in der Tabelle verwenden, wird dieses Feld vom DBMS ausgefüllt, wenn Sie einen Datensatz mit SQL einfügen. Wenn Sie die Werte im eindeutigen Kennungsfeld manuell verwalten, müssen Sie sicherstellen, dass ein eindeutiger Wert für die ID bereitgestellt wird, wenn Sie die Tabelle aus SQL bearbeiten.
Weitere Informationen finden Sie unter Was ist eine ObjectID?
Bearbeiten von ST_Geometry-Daten mit SQL
In SQL vorgenommene Änderungen an vorhandenen Datensätzen haben häufig Auswirkungen auf die nicht räumlichen Attribute, die in der Tabelle gespeichert sind. Sie können jedoch die Daten in der Spalte "ST_Geometry" mit den Konstruktorfunktionen innerhalb der SQL UPDATE-Anweisungen bearbeiten.
Wenn die Daten in einer Geodatabase gespeichert sind, gibt es zusätzliche Richtlinien, die Sie beim Bearbeiten mit SQL befolgen sollten:
- Datensätze dürfen nicht mit SQL aktualisiert werden, wenn die Daten versioniert wurden. Dies gilt allerdings nicht, wenn Sie SQL in Verbindung mit einer versionierten Sicht verwenden.
- Es dürfen keine Attribute geändert werden, die andere Objekte in der Datenbank beeinflussen, die an Geodatabase-Verhalten beteiligt sind, darunter Beziehungsklassen, Feature-bezogene Annotationen, Topologie oder Netzwerke.