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. Bestehende Berechtigungen bleiben erhalten, wenn Sie die OR REPLACE-Klausel verwenden, aber INSTEAD OF-Trigger für die Ansicht werden 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. Sie müssen den Trigger löschen, bevor die Ansicht gelöscht oder geändert werden kann.
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. Wenn eine ORDER BY-Klausel entweder mit einer TOP- oder mit einer FIRST-Klausel angegeben wird, gibt die Abfrage die obersten n Zeilen bzw. die erste Zeile zurück.
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. Tabellennamen, die in einer Ansicht verwendet werden, sollten die Benutzer-ID des Tabelleneigentümers angeben, damit zwischen Tabellen mit demselben Namen unterschieden werden kann. Um eine Ansicht zu erstellen, die einem anderen Benutzer gehört, benötigen Sie die DBA-Berechtigung und Sie müssen den Eigentümer angeben.
Ein Ansichtsname kann in den Anweisungen SELECT, DELETE, UPDATE und INSERT statt eines Tabellennamens verwendet werden.
SELECT * kann nur in der Hauptabfrage der CREATE VIEW-Anweisung verwendet werden. Abgeleitete Tabellen und Unterabfragen müssen
statt dem Operator * vollständige Ausdrücke in der Select-Liste verwenden. Beispiel: CREATE VIEW V AS SELECT * FROM T, (SELECT * FROM R) AS DT
ist falsch, da die abgeleitete Tabelle "DT" mit SELECT * anstatt einer Select-Liste mit angegebenen Ausdrücken angegeben
ist. Ebenso ist auch die implizite Verwendung von SELECT * in einer abgeleiteten Tabelle nicht zulässig. Beispiel: In CREATE VIEW V AS SELECT * FROM T, LATERAL(proc(T.A.)) AS DT
wird SELECT * implizit verwendet, da LATERAL(proc(T.A.))
eine Kurzform für LATERAL(SELECT * FROM proc(T.A.))
und daher in der Ansichtsdefinition nicht zulässig ist.
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). Eine Aktualisierung der Ansicht führt zu einer Aktualisierung der zugrunde liegenden Tabelle(n).
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.
RESSOURCE-Datenbankberechtigung und SELECT-Berechtigung für die Tabellen in der Ansichtsdefinition sind erforderlich.
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 zum Einschränken der Ergebnismenge einer Ansicht mit SELECT TOP oder LIMIT die optionale SQL/2008-Sprachenfunktion F859 (obwohl der SQL/2008-Standard die FETCH-Klausel für diesen Zweck verwendet). Die Angabe von WITH CHECK OPTION für eine Ansicht die nicht einfach 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) erfordert - 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 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 Employees JOIN 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 Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; |
Im folgenden Beispiel wird eine parametrisierte Ansicht erstellt, die auf den Variablen var1 und var2 basiert, die weder Attribute der Employees- noch der Departments-Tabelle sind:
CREATE VIEW EmployeesByState AS SELECT Surname, GivenName, DepartmentName FROM Employees JOIN 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 Products WHERE Products.Description LIKE var1; |
Um diese Ansicht zu verwenden, muss die Variable var1 definiert sein, bevor die die Ansicht referenzierende Abfrage ausgeführt wird. 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 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |