Erstellt eine Ansicht in der Datenbank.
CREATE [ OR REPLACE ] VIEW [ owner.]view-name [ ( column-name, ... ) ] AS query-expression [ WITH CHECK OPTION ]
OR REPLACE-Klausel Wenn Sie OR REPLACE (CREATE OR REPLACE VIEW) angeben, wird eine neue Ansicht erstellt oder eine bestehende Ansicht mit demselben Namen ersetzt. Vorhandene Privilegien bleiben unberührt, wenn Sie die OR REPLACE-Klausel verwenden. INSTEAD OF-Trigger für die Ansicht werden jedoch gelöscht.
Wenn Sie eine CREATE OR REPLACE VIEW-Anweisung für eine Ansicht ausführen, die einen oder mehrere INSTEAD OF-Trigger hat, wird ein Fehler zurückgegeben. Löschen Sie den Trigger, bevor Sie die Ansicht ändern oder löschen.
AS-Klausel Die SELECT-Anweisung, auf der die Ansicht basiert. Die SELECT-Anweisung darf sich nicht auf lokale temporäre Tabellen beziehen. Außerdem kann query-expression eine GROUP BY-, HAVING-, WINDOW- oder ORDER BY-Klausel enthalten sowie UNION, EXCEPT, INTERSECT oder einen allgemeinen Tabellenausdruck.
Die Semantik von Abfragen bestimmt, dass die Reihenfolge der zurückgegebenen Zeilen nicht definiert ist, es sei denn, die Abfrage kombiniert eine ORDER BY-Klausel mit einer TOP- oder FIRST-Klausel in der SELECT-Anweisung.
WITH CHECK OPTION-Klausel Die WITH CHECK OPTION-Klausel weist alle Aktualisierungen und Einfügungen der Ansicht zurück, die nicht den Kriterien der von den für query-expression festgelegten Werten entsprechen.
Ansichten existieren in der Datenbank nicht physisch als Tabellen. Sie werden jedes Mal abgeleitet, wenn sie verwendet werden. Eine Ansicht wird als das Ergebnis einer SELECT-Anweisung abgeleitet, die in einer CREATE VIEW-Anweisung angegeben wird. In einer Ansicht wird empfohlen, die Benutzer-ID des Tabelleneigentümers anzugeben, um zwischen Tabellen mit demselben Namen unterscheiden zu können.
Ein Ansichtsname kann in den Anweisungen SELECT, DELETE, UPDATE und INSERT statt eines Tabellennamens verwendet werden.
SELECT * kann in der Hauptabfrage verwendet werden sowie in einer Unterabfrage, einer abgeleiteten Tabelle oder einer Unterabfrage-Bedingung einer CREATE VIEW-Anweisung.
In einer Abfrage kann eine TOP n-, FIRST- oder LIMIT-Klausel angegeben werden, auch wenn er keine ORDER BY-Klausel enthält. Es wird höchstens die angegebene Zeilenanzahl zurückgegeben, aber die Reihenfolge der zurückgegebenen Zeilen ist nicht definiert. Eine ORDER BY-Klausel kann also angegeben werden, ist aber nicht erforderlich. Wenn in einer Abfrage eine Ansicht verwendet wird, bestimmt ORDER BY in der Ansicht nicht die Reihenfolge der Zeilen in der Abfrage, auch wenn die FROM-Klausel keine anderen Tabellen enthält. Das bedeutet, dass ORDER BY nur dann für eine Ansicht verwendet werden sollte, wenn es benötigt wird, um die Zeilen auszuwählen, die in eine TOP n-, FIRST- oder LIMIT-Klausel einbezogen werden sollen. Andernfalls hat die ORDER BY-Klausel keine Auswirkungen und wird vom Datenbankserver ignoriert.
Ansichten können aktualisiert werden, es sei denn, query-expression zur Definition der Ansicht enthält eine GROUP BY-Klausel, eine WINDOW-Klausel oder eine Aggregatfunktion bzw. erfordert einen Mengenoperator (UNION, INTERSECT, EXCEPT). Durch eine Aktualisierung der Ansicht werden auch deren Basistabellen aktualisiert.
Den Spalten in der Ansicht werden die Namen zugeordnet, die in der column-name-Liste angegeben sind. Wenn die Spaltennamenliste nicht festgelegt ist, werden den Spalten Namen aus den Elementen der Select-Liste gegeben. Alle Elemente in der Select-Liste müssen eindeutige Namen haben. Um Namen aus den Elementen der SELECT-Liste verwenden zu können, muss jedes Element ein einfacher Spaltenname sein oder einen Aliasnamen besitzen.
SQL Anywhere erlaubt unbenannte Ausdrücke in der Select-Liste von query-expression, die in der CREATE VIEW-Anweisung referenziert wird. Unbenannte Ausdrücke in der SELECT-Liste von query-expression erhalten den Namen expression, verbunden mit einem Ganzzahlwert, wenn mehr als ein solcher Ausdruck vorhanden ist. Die folgende Anweisung würde Ansicht "V" mit drei Spalten (expression, expression1 und expression2) definieren. Diese Namen würden in der SYSCOLUMN-Systemansicht für die erstellte Ansicht "V" angezeigt.
CREATE VIEW V AS SELECT DATEADD( DAY, 1, NOW() ), DATEADD( DAY, 2, NOW() ), DATEADD( DAY, 2, NOW() ) FROM SYS.DUMMY; |
Es wird nicht empfohlen, dass Sie sich auf diese generierten Namen verlassen, da andere Ansichten mit unbenannten Ausdrücken in der Select-Liste dieselben zugewiesenen Namen haben.
Üblicherweise referenziert eine Ansicht Tabellen und Ansichten (sowie ihre entsprechenden Attribute), die im Katalog definiert sind. Allerdings kann eine Ansicht auch SQL-Variablen referenzieren. Wenn in diesem Fall eine Abfrage, die die Ansicht referenziert, ausgeführt wird, wird der Wert der SQL-Variablen verwendet. Ansichten, die SQL-Variablen referenzieren, werden parametrisierte Ansichten genannt, da die Variablen als Parameter der Ausführung der Ansicht agieren.
Parametrisierte Ansichten bieten eine Alternative zum Einbetten des Hauptteils eines äquivalenten SELECT-Blocks in einer Abfrage als abgeleitete Tabelle in der FROM-Klausel der Abfrage. Parametrisierte Ansichten können bei eingebetteten Abfragen in gespeicherten Prozeduren nützlich sein, bei denen die in der Ansicht referenzierten SQL-Variablen Eingabeparameter für die Prozedur sind.
Es ist nicht notwendig, dass die SQL-Variable vorhanden ist, wenn die CREATE VIEW-Anweisung ausgeführt wird. Wenn jedoch eine Abfrage, die die Ansicht referenziert, ausgeführt wird, ohne dass die SQL-Variable definiert ist, wird ein Fehler zurückgegeben, der anzeigt, dass die Spalte (Variable) nicht gefunden werden konnte.
Sie müssen das CREATE VIEW-Systemprivileg haben, um Ansichten erstellen zu können, deren Eigentümer Sie sind. Sie müssen das CREATE ANY VIEW-Systemprivileg oder das CREATE ANY OBJECT-Systemprivileg haben, um Ansichten erstellen zu können, deren Eigentümer andere Benutzer sind.
Wenn die von der Ansicht referenzierten Tabellen Eigentum anderer Benutzer sind, benötigen Sie SELECT-Privilegien für diese Tabellen.
Automatisches Festschreiben (Autocommit).
SQL/2008 CREATE VIEW ist eine Kernfunktion des SQL/2008-Standards, aber einige Funktionen einer in eine Ansicht eingebetteten SELECT-Anweisung sind optionale Sprachenfunktionen. Die Möglichkeit zum Angeben einer ORDER BY-Klausel mit der SELECT-Anweisung auf der obersten Ebene in der Ansichtsdefinition ist die optionale SQL/2008-Sprachenfunktion F852. Die Möglichkeit, die Ergebnismenge einer Ansicht mit SELECT TOP oder LIMIT einzuschränken, ist die optionale SQL/2008-Sprachenfunktion F859 (obwohl der SQL/2008-Standard die FETCH-Klausel für diesen Zweck verwendet). Die Möglichkeit, WITH CHECK OPTION für eine Ansicht anzugeben, die nicht aktualisierbar ist, z.B. weil die SELECT-Anweisung der Ansicht eine abgeleitete Tabelle mit Aggregaten oder DISTINCT enthält oder einen Mengenoperator (INTERSECT, EXCEPT oder UNION), ist die optionale SQL/2008-Sprachenfunktion T111.
Einige Funktionen von CREATE VIEW sind Erweiterungen des Herstellers. Parametrisierte Ansichten sind eine Erweiterung des Herstellers, wie auch die optionale OR REPLACE-Syntax und die automatische Generierung von Namen für unbenannte Ausdrücke in der SELECT-Liste.
Im folgenden Beispiel wird eine Ansicht erstellt, die nur Angaben zu den männlichen Mitarbeitern enthält. Die Ansicht verfügt über die gleichen Spaltennamen wie die Basistabelle:
CREATE VIEW MaleEmployees AS SELECT * FROM GROUPO.Employees WHERE Sex = 'M'; |
Im folgenden Beispiel wird eine Ansicht mit den Mitarbeitern und ihren jeweiligen Abteilungen erstellt:
CREATE VIEW EmployeesAndDepartments AS SELECT Surname, GivenName, DepartmentName FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID; |
Im folgenden Beispiel wird die Ansicht EmployeesAndDepartments ersetzt, die im vorherigen Beispiel erstellt wurde. Nachdem die Ansicht ersetzt wurde, zeigt sie "city", "state" und "country" für jeden Angestellten:
CREATE OR REPLACE VIEW EmployeesAndDepartments AS SELECT Surname, GivenName, City, State, Country FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID; |
Im folgenden Beispiel wird eine parametrisierte Ansicht auf Basis der Variablen var1 und var2 erstellt, die keine Attribute der Tabellen "Employees" und "Departments" sind:
CREATE VIEW EmployeesByState AS SELECT Surname, GivenName, DepartmentName FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID WHERE Employees.State = var1 and Employees.Status = var2; |
Variablen können in der SELECT-Anweisung der Ansicht in jedem Kontext auftreten, bei dem eine Variable ein zulässiger Ausdruck ist. Beispiel: Die folgende parametrisierte Ansicht verwendet den Parameter var1 als Muster für ein LIKE-Prädikat:
CREATE VIEW ProductsByDescription AS SELECT * FROM GROUPO.Products WHERE Products.Description LIKE var1; |
Um diese Ansicht verwenden zu können, definieren Sie die Variable var1, bevor Sie die Abfrage ausführen, die die Ansicht referenziert. Folgende BEGIN-Anweisung könnte z.B. Bestandteil einer Prozedur, einer Funktion oder einer Batchanweisung sein:
BEGIN DECLARE var1 CHAR(20); SET var1 = '%cap%'; SELECT * FROM ProductsByDescription END |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |