Beispiel: Erstellen einer Datenbanksicht in Oracle mit SQL und Registrieren in ArcSDE
Sie können SQL verwenden, um eine Sicht in einer ArcSDE-Geodatabase zu erstellen. Um die Sicht mit ArcGIS abzufragen, müssen Sie sie in ArcSDE registrieren.
Damit Sie die Sicht in ArcSDE registrieren können, muss die zugrunde liegende Tabelle, aus der die Sicht erstellt wird, eine qualifizierende Zeilen-ID-Spalte enthalten. Zeilen-IDs sind eindeutige Spalten vom Typ "Integer" ohne NULL-Werte, die von ArcSDE zum eindeutigen Identifizieren von Zeilen in einer Tabelle oder Sicht verwendet werden. Auch wenn Sie eine Sicht ohne Registrierung einer Zeilen-ID-Spalte erstellen können, weist eine solche Sicht eingeschränkte Funktionen in ArcGIS auf, da eine registrierte Zeilen-ID-Spalte für die Auswahl und für Abfragen in ArcGIS erforderlich ist.
Das Beispiel in diesem Thema veranschaulicht, wie eine in Oracle mit SQL erstellte Sicht in ArcSDE registriert werden kann. Das Beispiel basiert auf einer Tabelle mit der folgenden Definition:
CREATE TABLE employees ( emp_id number(38) unique not null, name varchar2(32), department number not null, hire_date date not null);
Beachten Sie, dass die Tabelle bereits eine Spalte vom Typ "Integer" ohne NULL-Werte enthält, die für die Zeilen-ID in ArcSDE (emp_id) verwendet werden kann. Diese Spalte muss in der Sichtdefinition enthalten sein, damit Sie sie in ArcSDE registrieren können.
Erteilen von Berechtigungen für die Tabelle
Wenn der Benutzer, der die Sicht erstellt, nicht der Besitzer der Tabelle(n) ist, auf denen die Sicht basiert, muss der Tabellenbesitzer dem Ersteller der Sicht mindestens eine Berechtigung zur Auswahl aus der Tabelle erteilen. Wenn der Besitzer der Sicht in der Lage sein muss, auch anderen Benutzern Berechtigungen für die Sicht zu erteilen, muss der Tabellenbesitzer dem Besitzer der Sicht die Berechtigung erteilen, anderen Benutzern Berechtigungen zu erteilen.
In diesem Beispiel befindet sich die Tabelle, auf der die Sicht basiert (employees), im Besitz von Benutzer "gdb". Der Benutzer, der die Sicht erstellt, ist Benutzer "rocket". Darüber hinaus muss Benutzer "rocket" anderen Benutzern Berechtigungen für die Sicht erteilen. Deshalb erteilt Benutzer "gdb" dem Benutzer "rocket" die Berechtigung, aus der Tabelle "employees" auszuwählen und WITH GRANT OPTION einzuschließen, damit "rocket" anderen Benutzern Berechtigungen für die Sicht erteilen kann.
conn gdb/gdb.bdg GRANT SELECT ON employees TO rocket WITH GRANT OPTION;
Erstellen von Sichten
In diesem Beispiel erstellt Benutzer "rocket" eine Sicht für die Tabelle "employees", um den Zugriff auf die Datensätze zu beschränken, deren Abteilung ("department") 201 ist.
CREATE VIEW view_dept_201 AS SELECT (emp_id,name,department,hire_date) FROM GDB.EMPLOYEES WHERE department = 201;
Erteilen von Berechtigungen für die Sicht
Sie können bestimmten Benutzern Berechtigungen für die Sicht erteilen, ohne den Benutzern Zugriff auf die Basistabelle (employees) zu erteilen. In diesem Beispiel erhält der Benutzer "mgr200" eine SELECT-Berechtigung für die Sicht "view_dept_201":
conn rocket/nopeeking GRANT SELECT ON view_dept_201 TO mgr200;
Testen der Berechtigungen
Melden Sie sich als "mgr200" an, und wählen Sie Datensätze aus "view_dept_201" aus.
conn mgr200/topsecret SELECT * FROM rocket.view_dept_201; EMP_ID NAME DEPT HIRE_DATE 112 LOLLI POP 201 06/30/2007 134 VAN CHIN 201 10/15/2007 150 DON GUN 201 03/01/2009
Wie erwartet werden nur Datensätze für Mitarbeiter in Abteilung 201 zurückgegeben.
Registrieren der Sicht in ArcSDE
Um Datensätze in einer Sicht aus einer ArcGIS-Client-Anwendung abzufragen oder auszuwählen, müssen Sie die Sicht in ArcSDE registrieren. Wenn Sie die Sicht in ArcSDE registrieren, wird ein Datensatz zur ArcSDE-Systemtabelle TABLE_REGISTRY hinzugefügt.
Verwenden Sie zum Registrieren der Sicht den Befehl "sdetable" zusammen mit der Operation "register". Nur der Besitzer der Sicht kann diese in ArcSDE registrieren. Deshalb müssen beim Registrieren von "view_dept_201" der Benutzername "rocket" und das Kennwort mit dem Befehl "sdetable" angegeben werden.
sdetable -o register -t rocket.view_dept_201 -c emp_id -C SDE -i sde:oracle11g:ora1 -s myodbserver -u rocket -p nopeeking
In diesem Beispiel wird die Zeilen-ID (emp_id) als durch ArcSDE verwaltet registriert. Falls die Sicht schreibgeschützt ist, können Sie die Zeilen-ID als vom Benutzer verwaltet registrieren.
Weitere Informationen zum Befehl "sdetable" finden Sie in der Administration Command Reference.