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-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

CREATE MATERIALIZED VIEW-Anweisung

Mit dieser Anweisung erstellen Sie eine materialisierte Ansicht.

Syntax
CREATE MATERIALIZED VIEW 
[ Eigentümer.]Materialisierte_Ansicht_Name [ ( Alt_Spaltenname, ... ) ]
[ IN DBSpace-Name ]
AS SELECT-Anweisung
[ CHECK { IMMEDIATE | MANUAL } REFRESH ]
Alt_Spaltennamen :
( Spaltenname [,...] )
Parameter
  • Alt_Spaltennamen   Verwenden Sie diese Klausel, um alternative Namen für die Spalten in der materialisierten Ansicht anzugeben. Wenn Sie alternative Spalten angeben, muss die Anzahl von Spalten in Alt_Spaltennamen der Anzahl von Spalten in der SELECT-Anweisung entsprechen. Wenn Sie keine alternativen Spaltennamen angeben, werden als Namen die in der SELECT-Anweisung enthaltenen herangezogen.

  • IN-Klausel   Verwenden Sie diese Klausel, um den DBSpace anzugeben, in dem die materialisierte Ansicht erstellt werden soll. Wenn diese Klausel nicht angegeben ist, wird die materialisierte Ansicht in dem DBSpace erstellt, der in der Option default_dbspace angegeben wurde. Sonst wird der SYSTEM-DBSpace benutzt. Weitere Hinweise finden Sie unter Zusätzliche DBSpaces verwenden.

  • AS-Klausel   Verwenden Sie diese Klausel, um in Form einer SELECT-Anweisung die Daten anzugeben, die verwendet werden, um die materialisierte Ansicht zu füllen. Eine Definition einer materialisierten Ansicht kann nur Basistabellen referenzieren, keine Ansichten, anderen materialisierten Ansichten oder temporären Tabellen. Die SELECT-Anweisung muss Spaltennamen oder einen Aliasnamen enthalten. Wenn Sie Alt_Spaltennamen angeben, werden diese Namen anstelle der Alias verwendet, die in der SELECT-Anweisung enthalten sind.

    Spaltennamen in der SELECT-Anweisung müssen explizit angegeben werden, das Konstrukt SELECT * kann nicht verwendet werden. Beispiel: Sie können CREATE MATERIALIZED VIEW matview AS SELECT * FROM Tabellenname nicht verwenden. Objektnamen müssen darüber hinaus in der SELECT-Anweisung voll qualifiziert werden. Weitere Hinweise finden Sie unter Einschränkungen bei materialisierten Ansichten.

  • CHECK-Klausel   Verwenden Sie diese Klausel, um die Anweisung ohne Erstellung der Ansicht zu validieren. Wenn Sie die CHECK-Klausel angeben:

    • Der Datenbankserver führt die normalen Sprachprüfungen durch, die auch durchgeführt würden, wenn CREATE MATERIALIZED VIEW ohne Klausel ausgeführt worden wäre. Eventuell generierte Fehler werden wie üblich zurückgegeben.

    • Der Datenbankserver führt die Erstellung der Ansicht nicht wirklich aus. Das bedeutet, dass Fehler, die zum Erstellungszeitpunkt auftreten würden, jetzt nicht generiert werden. Beispiel: Ein Fehler, der angibt, dass der angegebene Ansichtsname bereits existiert, wird nicht generiert. Damit können Sie die CHECK-Klausel verwenden, um beabsichtigte Änderungen an der Definition der Ansicht zu prüfen, ohne einen Namenskonflikt mit der Ansicht befürchten zu müssen.

    • Wenn CHECK IMMEDIATE REFRESH benutzt wird, prüft der Datenbankserver, ob die Syntax für eine Sofortansicht gültig ist, und gibt eventuelle Fehler zurück.

    • Es werden keine Änderungen an der Datenbank durchgeführt und im Transaktionslog wird nichts aufgezeichnet.

    • Ein implizites COMMIT erfolgt am Beginn der Anweisungs-Ausführung und ein ROLLBACK am Ende, um alle Sperren freizugeben, die während der Ausführung gesetzt wurden.

Bemerkungen

Wenn Sie eine materialisierte Ansicht erstellen, ist sie eine manuelle Ansicht und nicht initialisiert. Das heißt: Sie hat den Aktualisierungstyp "manuell" und ist noch nicht aktualisiert (mit Daten gefüllt) worden. Um die Ansicht zu initialisieren, führen Sie die Anweisung REFRESH MATERIALIZED VIEW aus oder benutzen die Systemprozedur sa_refresh_materialized_views. Weitere Hinweise finden Sie unter REFRESH MATERIALIZED VIEW-Anweisung und sa_refresh_materialized_views-Systemprozedur.

Sie können eine materialisierte Ansicht verschlüsseln, ihre PCTFREE-Einstellung und ihren Aktualisierungstyp ändern sowie ihre Verwendung durch den Optimierer aktivieren oder deaktivieren. Sie müssen allerdings zuerst die materialisierte Ansicht erstellen und dann ALTER MATERIALIZED VIEW verwenden, um diese Einstellungen zu ändern. Die Standardwerte für materialisierte Ansichten zum Erstellungszeitpunkt sind:

  • NOT ENCRYPTED

  • ENABLE USE IN OPTIMIZATION

  • PCTFREE wird je nach Seitengröße der Datenbank eingestellt: 200 Byte für eine 4-KByte-Seitengröße und 100 Byte für eine 2-KByte-Seitengröße.

  • MANUAL REFRESH

Mehrere Datenbank- und Serveroptionen müssen aktiviert sein, um eine materialisierte Ansicht zu erstellen. Weitere Hinweise finden Sie unter Einschränkungen bei materialisierten Ansichten.

Die Systemprozedur sa_recompile_views wirkt sich nicht auf materialisierte Ansichten aus.

Berechtigungen

Sie müssen über RESSOURCE-Datenbankberechtigungen und SELECT-Berechtigungen für die Tabellen in der Definition der materialisierten Ansicht verfügen. Um eine materialisierte Ansicht für einen anderen Benutzer zu erstellen, sind außerdem DBA-Berechtigungen erforderlich.

Nebenwirkungen

Während der Ausführung setzt die CREATE MATERIALIZED VIEW-Anweisung exklusive Sperren ohne Blockierung für alle von der materialisierten Ansicht referenzierten Tabellen. Wenn eine der referenzierten Tabellen nicht gesperrt werden kann, schlägt die Anweisung fehl und es wird ein Fehler zurückgegeben.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiel

Das folgende Beispiel erstellt in der SQL Anywhere-Beispieldatenbank eine materialisierte Ansicht, die vertrauliche Informationen über Mitarbeiter enthält. Sie müssen danach eine REFRESH MATERIALIZED VIEW-Anweisung ausführen, um die Ansicht für die Verwendung bereitzumachen, wie im Beispiel gezeigt wird.

CREATE MATERIALIZED VIEW EmployeeConfid2 AS
SELECT EmployeeID, Employees.DepartmentID, 
    SocialSecurityNumber, Salary, ManagerID, 
    Departments.DepartmentName, Departments.DepartmentHeadID
FROM Employees, Departments
WHERE Employees.DepartmentID=Departments.DepartmentID;
REFRESH MATERIALIZED VIEW EmployeeConfid2;