Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Mit Datenbankobjekten arbeiten

 

Mit regulären Ansichten arbeiten

Wenn Sie Daten durchsuchen, arbeitet eine Abfrage mit einem oder mehreren Datenbankobjekten und erzeugt eine Ergebnismenge. Genau wie eine Basistabelle hat eine Ergebnismenge aus einer Abfrage Spalten und Zeilen. Eine Ansicht gibt einer Abfrage einen bestimmten Namen und hält die Definition in den Systemtabellen der Datenbank fest.

Nehmen wir an, dass Sie die Anzahl der Mitarbeiter in jeder Abteilung auflisten wollen. Sie können diese Liste mit der folgenden Anweisung zusammenstellen:

SELECT DepartmentID, COUNT(*)
FROM Employees
GROUP BY DepartmentID;

Sie können mit Sybase Central oder Interactive SQL eine Ansicht erstellen, die die Ergebnisse dieser Anweisung enthält.

Beschränkungen für SELECT-Anweisungen bei regulären Ansichten

Es bestehen einige Einschränkungen bezüglich der SELECT-Anweisungen, die Sie als reguläre Ansichten verwenden können. Insbesondere können Sie keine ORDER BY-Klausel in einer SELECT-Abfrage verwenden. Es gehört zum Wesen von relationalen Datenbanktabellen, dass die Reihenfolge der Zeilen und Spalten keine Bedeutung hat. Eine ORDER BY-Klausel würde die Zeilen der Ansicht in eine Reihenfolge zwingen. Sie können die GROUP BY-Klausel, Unterabfragen und Joins in Ansichtsdefinitionen verwenden.

Um eine Ansicht zu entwickeln, sollten Sie die SELECT-Abfrage selbst so abstimmen, bis sie genau die Ergebnisse und das Format liefert, die Sie benötigen. Wenn die SELECT-Anweisung richtig abgestimmt ist, können Sie vor der Abfrage die folgende Klausel hinzufügen, um die Ansicht zu erstellen:

CREATE VIEW Ansichtsname AS Abfrage;
Reguläre Ansichten aktualisieren

Aktualisierungen können in einer Ansicht mit den UPDATE-, INSERT- oder DELETE-Anweisungen durchgeführt werden, wenn die Abfragenspezifikation, die die Ansicht festlegt, aktualisierbar ist. Ansichten sind von Natur aus nicht-aktualisierbar, wenn ihre Definition eine der folgenden Elemente in ihrer Abfragenspezifikation enthält:

  • UNION-Klausel

  • DISTINCT-Klausel

  • GROUP BY-Klausel

  • FIRST- oder TOP-Klausel

  • Aggregatfunktionen

  • Mehr als eine Tabelle in der FROM-Klausel, wenn die Option ansi_update_constraints auf 'Strict' oder 'Cursor' gesetzt ist. Weitere Hinweise finden Sie unter ansi_update_constraints-Option [Kompatibilität].

  • ORDER BY-Klausel, wenn die Option ansi_update_constraints auf 'Strict' oder 'Cursor' gesetzt ist. Weitere Hinweise finden Sie unter ansi_update_constraints-Option [Kompatibilität].

  • Alle Auswahlliste-Elemente, die keine Basistabellenspalten sind.

Reguläre Ansichten kopieren

In Sybase Central können Sie Ansichten zwischen Datenbanken kopieren. Wählen Sie dazu die Ansicht im rechten Fensterausschnitt von Sybase Central und ziehen Sie sie in den Ordner Ansichten einer anderen verbundenen Datenbank. Es wird eine neue Ansicht erstellt und die Definition der Originalansicht wird für die neue Ansicht kopiert. Beachten Sie, dass lediglich die Ansichtsdefinition für die neue Ansicht kopiert wird. Andere Ansichtseigenschaften, z.B. Berechtigungen, werden nicht kopiert.

WITH CHECK OPTION-Option verwenden

Die Klausel WITH CHECK OPTION ist nützlich, um zu kontrollieren, welche Daten geändert werden, wenn über eine Ansicht Daten in eine Basistabelle eingefügt oder aktualisiert werden. Mit dem folgenden Beispiel wird dies veranschaulicht.

Führen Sie die folgende Anweisung aus, um die Ansicht "SalesEmployees" mit einer WITH CHECK OPTION-Klausel zu erstellen.

CREATE VIEW SalesEmployees AS
   SELECT EmployeeID, GivenName, Surname, DepartmentID
   FROM Employees
   WHERE DepartmentID = 200
   WITH CHECK OPTION;

Zeigen Sie die Inhalte dieser Ansicht wie folgt an:

SELECT * FROM SalesEmployees;
EmployeeID GivenName Surname DepartmentID
129 Philip Chin 200
195 Marc Dill 200
299 Rollin Overbey 200
467 James Klobucher 200
... ... ... ...

Versuchen Sie nun, die "DepartmentID" für Philip Chin auf 400 zu ändern:

UPDATE SalesEmployees
SET DepartmentID = 400 
WHERE EmployeeID = 129;

Da WITH CHECK OPTION festgelegt wurde, prüft der Datenbankserver, ob die Aktualisierung die neue Ansichtsdefinition verletzt (in diesem Fall den Ausdruck in der WHERE-Klausel). Die Anweisung schlägt fehl (DepartmentID muss 200 sein) und der Datenbankserver meldet den Fehler "Verletzung von WITH CHECK OPTION für INSERT/UPDATE in Basistabelle 'Employees'."

Hätten Sie WITH CHECK OPTION nicht in der Ansichtsdefinition angegeben, wäre die Aktualisierung fortgesetzt worden. Die Tabelle "Employees" wäre auf den neuen Wert geändert worden, und Philip Chin wäre aus der Ansicht verschwunden.

Wenn eine Ansicht (z.B. "View2") erstellt wird, welche die Ansicht "SalesEmployee" referenziert, werden alle Aktualisierungen oder Einfügungen in "View2" zurückgewiesen, die dem WITH CHECK OPTION-Kriterium für "SalesEmployee" widersprechen, auch wenn "View2" ohne WITH CHECK OPTION definiert ist.

Siehe auch

Status regulärer Ansichten
Reguläre Ansichten erstellen
Reguläre Ansichten ändern
Reguläre Ansichten löschen
Reguläre Ansichten aktivieren und deaktivieren
Daten in regulären Ansichten durchsuchen
Systemtabellendaten anzeigen