Firebird Documentation IndexFirebird 2.5 SprachreferenzStatements der Data Definition (DDL) → VIEW
Firebird Home Firebird Home Zurück: INDEXFirebird Documentation IndexNach oben: Statements der Data Definition (DDL)Weiter: TRIGGER

VIEW

Inhaltsverzeichnis

CREATE VIEW
ALTER VIEW
CREATE OR ALTER VIEW
DROP VIEW
RECREATE VIEW

Eine Sicht (VIEW) ist eine virtuelle Tabelle, bei der es sich um eine gespeicherte und benannte SELECT-Abfrage zum Abrufen von Daten beliebiger Komplexität handelt. Daten können aus einer oder mehreren Tabellen, aus anderen Ansichten und aus ausgewählten gespeicherten Prozeduren abgerufen werden.

Im Gegensatz zu regulären Tabellen in relationalen Datenbanken ist eine Sicht kein unabhängiger Datensatz, der in der Datenbank gespeichert ist. Das Ergebnis wird dynamisch als Datensatz erstellt, wenn die Ansicht ausgewählt wird.

Die Metadaten einer Sicht sind für den Prozess verfügbar, der den Binärcode für gespeicherte Prozeduren und Trigger generiert, so als wären es konkrete Tabellen, in denen persistente Daten gespeichert werden.

CREATE VIEW

Benutzt für: Erstellen einer View

Verfügbar in: DSQL

Syntax: 

CREATE VIEW viewname [<full_column_list>]
AS <select_statement>
[WITH CHECK OPTION];

<full_column_list> ::= (colname [, colname ...])
        

Tabelle 5.16. CREATE VIEW Statement-Parameter

Parameter Beschreibung
viewname View-Name, maximal 31 Zeichen
select_statement SELECT-Statement
full_column_list Die Liste der Spalten in der View
colname Spaltenname der View. Doppelte Spaltennamen sind nicht zulässig.


Die Anweisung CREATE VIEW erstellt eine neue View Der Bezeichner (Name) einer View muss unter den Namen aller Ansichten, Tabellen und gespeicherten Prozeduren in der Datenbank eindeutig sein.

Dem Namen der neuen Sicht kann die Liste der Spaltennamen folgen, die beim Aufrufen der View an den Aufrufer zurückgegeben werden sollen. Namen in der Liste müssen nicht mit den Namen der Spalten in den Basistabellen verknüpft sein, von denen sie abgeleitet werden.

Wenn die Sichtspaltenliste ausgelassen wird, verwendet das System die Spaltennamen und / oder Aliase aus der Anweisung SELECT. Wenn doppelte Namen oder nicht von Alias-Ausdrucken abgeleitete Spalten das Erstellen einer gültigen Liste unmöglich machen, schlägt die Erstellung der View mit einem Fehler fehl.

Die Anzahl der Spalten in der Liste der Ansichten muss genau der Anzahl der Spalten in der Auswahlliste der zugrunde liegenden SELECT-Anweisung in der Sichtdefinition entsprechen.

Zusätzliche Punkte

  • Wenn die vollständige Liste der Spalten angegeben ist, ist es nicht sinnvoll, Aliase in der Anweisung SELECT anzugeben, da die Namen in der Spaltenliste diese überschreiben
  • Die Spaltenliste ist optional, wenn alle Spalten in SELECT explizit benannt sind und in der Auswahlliste eindeutig sind

Aktualisierbare Views

Eine View kann aktualisierbar oder schreibgeschützt sein. Wenn eine Sicht aktualisierbar ist, können die beim Aufruf dieser Sicht abgerufenen Daten durch die DML-Anweisungen INSERT, UPDATE, DELETE, UPDATE OR INSERT oder MERGE. Änderungen, die in einer aktualisierbaren View vorgenommen wurden, werden auf die zugrunde liegenden Tabelle (n) angewendet.

Eine Nur-Lese-Ansicht kann mit Hilfe von Triggern aktualisiert werden. Nachdem Trigger in einer Sicht definiert wurden, werden Änderungen, die an sie gesendet wurden, niemals automatisch in die zugrunde liegende Tabelle geschrieben, selbst wenn die Ansicht von vornherein aktualisiert werden konnte. Es liegt in der Verantwortung des Programmierers, sicherzustellen, dass die Trigger die Basistabellen nach Bedarf aktualisieren (oder löschen oder einfügen).

Eine View wird automatisch aktualisiert, wenn alle der folgenden Bedingungen erfüllt sind:

  • Die SELECT-Anweisung fragt nur eine Tabelle oder eine aktualisierbare Ansicht ab
  • Die Anweisung SELECT ruft keine gespeicherten Prozeduren auf
  • jede Spalte der Basistabelle (oder Basissicht), die in der Sichtdefinition nicht vorhanden ist, wird durch eine der folgenden Bedingungen abgedeckt:
    • sie ist nullbar
    • sie hat einen nicht-NULL Standardwert
    • sie hat einen Trigger, der einen zulässigen Wert liefert
  • die Anweisung SELECT enthält keine Felder, die von Unterabfragen oder anderen Ausdrücken abgeleitet wurden
  • die SELECT-Anweisung enthält keine durch Aggregatfunktionen definierten Felder wie MIN, MAX, AVG, SUM, COUNT, LIST
  • Die SELECT-Anweisung enthält keine der Klauseln ORDER BY oder GROUP BY
  • Das SELECT-Statement enthält weder das Schlüsselwort DISTINCT noch zeilenbeschränkende Schlüsselwörter wie ROWS, FIRST, SKIP

WITH CHECK OPTION

Die optionale Klausel WITH CHECK OPTION erfordert eine aktualisierbare Sicht, um zu überprüfen, ob neue oder aktualisierte Daten die in der WHERE-Klausel der SELECT. Jeder Versuch, einen neuen Datensatz einzufügen oder einen bestehenden zu aktualisieren, wird überprüft, ob der neue oder aktualisierte Datensatz den Kriterien aus WHERE entspricht. Wenn die Überprüfung fehlschlägt, wird die Operation nicht ausgeführt und eine entsprechende Fehlermeldung wird zurückgegeben.

WITH CHECK OPTION kann nur in einer CREATE VIEW-Anweisung angegeben werden, in der eine WHERE-Klausel vorhanden ist, um die Ausgabe der SELECT-Anweisung einzuschränken. Eine Fehlermeldung wird ansonsten zurückgegeben.

Bitte beachten:

Wenn WITH CHECK OPTION verwendet wird, prüft das Modul die Eingabe für die WHERE-Klausel, bevor etwas an die Basisrelation übergeben wird. Wenn die Überprüfung der Eingabe fehlschlägt, werden daher keine Standardklauseln oder Trigger der Basisrelation, welche möglicherweise zur Korrektur der Eingaben erstellt wurden, ausgeführt.

Außerdem werden Sichtfelder, die in der Anweisung INSERT ausgelassen wurden, unabhängig von ihrer Anwesenheit oder Abwesenheit in der WHERE-Klausel als NULLs an die Basisrelation übergeben. Infolgedessen werden Basistabellenstandards, die für solche Felder definiert sind, nicht angewendet. Auslöser dagegen werden wie erwartet feuern und arbeiten.

Für Views, die WITH CHECK OPTION nicht enthalten, werden Felder, die in der Anweisung INSERT fehlen, überhaupt nicht an die Basisrelation übergeben.

Eigentümer einer View

Der Ersteller einer Sicht wird zu seinem Besitzer.

Um eine Sicht zu erstellen, benötigt ein Benutzer ohne Administratorrechte mindestens SELECT-Zugriff auf die zugrunde liegenden Tabelle(n) und / oder Ansichten und die Berechtigung EXECUTE auf abfragbare gespeicherte Prozeduren.

Um Einfügungen, Aktualisierungen und Löschungen durch die Sicht zu ermöglichen, muss der Ersteller / Eigentümer auch die entsprechenden Berechtigungen INSERT, UPDATE und DELETE auf die zugrunde liegenden Objekt(e) besitzen.

Das Freigeben anderer Benutzerprivilegien für die Sicht ist nur möglich, wenn der Sichtbesitzer selbst diese Berechtigungen für die zugrunde liegenden Objekte WITH GRANT OPTION besitzt. Dies ist immer dann der Fall, wenn der View-Besitzer auch Eigentümer der zugrunde liegenden Objekte ist.

Beispiele zum Erstellen von Views: 

  1. Creating view returning the JOB_CODE and JOB_TITLE columns only for those jobs where MAX_SALARY is less than $15,000.
    CREATE VIEW ENTRY_LEVEL_JOBS AS
    SELECT JOB_CODE, JOB_TITLE
    FROM JOB
    WHERE MAX_SALARY < 15000;
                
  2. Erstellen einer Ansicht, die die Spalten JOB_CODE und JOB_TITLE nur für diejenigen Jobs zurückgibt, bei denen MAX_SALARY weniger als 15.000 USD beträgt. Immer wenn ein neuer Datensatz eingefügt oder ein vorhandener Datensatz aktualisiert wird, wird der Wert MAX_SALARY < 15000 Zustand wird überprüft. Wenn die Bedingung nicht wahr ist, wird die Operation zum Einfügen / Aktualisieren zurückgewiesen.
    CREATE VIEW ENTRY_LEVEL_JOBS AS
    SELECT JOB_CODE, JOB_TITLE
    FROM JOB
    WHERE MAX_SALARY < 15000
    WITH CHECK OPTION;
                
  3. Erstellen einer Ansicht mit einer expliziten Spaltenliste.
    CREATE VIEW PRICE_WITH_MARKUP (
      CODE_PRICE,
      COST,
      COST_WITH_MARKUP
    ) AS
    SELECT
      CODE_PRICE,
      COST,
      COST * 1.1
    FROM PRICE;
                
  4. Erstellen einer View mit Hilfe von Aliasnamen für Felder in der SELECT-Anweisung (das gleiche Ergebnis wie in Beispiel 3).
    CREATE VIEW PRICE_WITH_MARKUP AS
    SELECT
      CODE_PRICE,
      COST,
      COST * 1.1 AS COST_WITH_MARKUP
    FROM PRICE;
                
  5. Erstellen einer schreibgeschützten Ansicht basierend auf zwei Tabellen und einer gespeicherten Prozedur.
    CREATE VIEW GOODS_PRICE AS
    SELECT
        goods.name AS goodsname,
        price.cost AS cost,
        b.quantity AS quantity
    FROM
        goods
        JOIN price ON goods.code_goods = price.code_goods
        LEFT JOIN sp_get_balance(goods.code_goods) b ON 1 = 1;
               

Siehe auch:  ALTER VIEW, CREATE OR ALTER VIEW, RECREATE VIEW, DROP VIEW

ALTER VIEW

Benutzt für: Ändern einer existierenden View

Verfügbar in: DSQL

Syntax: 

ALTER VIEW viewname [<full_column_list>]
AS <select_statement>
[WITH CHECK OPTION];

<full_column_list> ::= (colname [, colname ...])
        

Tabelle 5.17. ALTER VIEW Statement-Parameter

Parameter Beschreibung
viewname Name einer existierenden View
select_statement SELECT-Statement
full_column_list Die Liste der Spalten in der View
colname Spaltenname der View Doppelte Spaltennamen sind nicht zulässig.


Verwenden Sie die Anweisung ALTER VIEW, um die Definition einer vorhandenen View zu ändern. Berechtigungen für Ansichten bleiben erhalten und Abhängigkeiten sind nicht betroffen.

Die Syntax der Anweisung ALTER VIEW entspricht vollständig der von CREATE VIEW.

Achtung

Seien Sie vorsichtig, wenn Sie die Anzahl der Spalten in einer Ansicht ändern. Vorhandener Anwendungscode und PSQL-Module, die auf die Sicht zugreifen, können ungültig werden. Informationen zur Erkennung dieser Art von Problemen in gespeicherten Prozeduren und Triggern finden Sie unter Das RDB$VALID_BLR-Feld im Anhang.

Nur der View-Eigentümer und Administratoren besitzen die notwendigen Berechtigungen zum Ausführen von ALTER VIEW.

Beispiele zur Verwendung von ALTER VIEW: Ansicht ändern PRICE_WITH_MARKUP

ALTER VIEW PRICE_WITH_MARKUP (
  CODE_PRICE,
  COST,
  COST_WITH_MARKUP
) AS
SELECT
  CODE_PRICE,
  COST,
  COST * 1.15
FROM PRICE;
          

Siehe auch:  CREATE VIEW, CREATE OR ALTER VIEW, RECREATE VIEW

CREATE OR ALTER VIEW

Benutzt für: Creating a new view or altering an existing view.

Verfügbar in: DSQL

Syntax: 

CREATE OR ALTER VIEW viewname [<full_column_list>]
AS <select_statement>
[WITH CHECK OPTION];

<full_column_list> ::= (colname [, colname ...])
        

Tabelle 5.18. CREATE OR ALTER VIEW Statement-Parameter

Parameter Beschreibung
viewname Name einer View, die vorhanden oder nicht vorhanden ist
select_statement SELECT-Statement
full_column_list Die Liste der Spalten in der View
colname Spaltenname der View. Duplikate sind nicht zulässig.


Verwenden Sie die Anweisung CREATE OR ALTER VIEW, um die Definition einer vorhandenen Ansicht zu ändern oder sie zu erstellen, falls sie nicht existiert. Berechtigungen für eine vorhandene Ansicht bleiben erhalten und Abhängigkeiten werden nicht beeinflusst.

Die Syntax der Anweisung CREATE OR ALTER VIEW entspricht vollständig der von CREATE VIEW.

Beispiel:  Erstellen Sie die Ansicht PRICE_WITH_MARKUP der neuen Ansicht oder ändern Sie sie, falls diese bereits vorhanden ist:

CREATE OR ALTER VIEW PRICE_WITH_MARKUP (
  CODE_PRICE,
  COST,
  COST_WITH_MARKUP
) AS
SELECT
  CODE_PRICE,
  COST,
  COST * 1.15
FROM PRICE;
          

Siehe auch:  CREATE VIEW, ALTER VIEW, RECREATE VIEW

DROP VIEW

Benutzt für: Löschen (dropping) einer View

Verfügbar in: DSQL

Syntax: 

DROP VIEW viewname;
        

Tabelle 5.19. DROP VIEW Statement-Parameter

Parameter Beschreibung
viewname View-Name


Die Anweisung DROP VIEW löscht eine existierende View. Die Anweisung wird fehlschlagen wenn die View Abhängigkeiten besitzt.

Nur der Eigentümer der View und Administratoren besitzen die notwendigen Berechtigungen zum Ausführen von DROP VIEW.

Beispiel:  Löschen der View PRICE_WITH_MARKUP.

DROP VIEW PRICE_WITH_MARKUP;
          

Siehe auch:  CREATE VIEW, RECREATE VIEW, CREATE OR ALTER VIEW

RECREATE VIEW

Benutzt für: Erstellen einer neuen Ansicht oder Wiederherstellen einer vorhandenen View

Verfügbar in: DSQL

Syntax: 

RECREATE VIEW viewname [<full_column_list>]
AS <select_statement>
[WITH CHECK OPTION];

<full_column_list> ::= (colname [, colname ...])
        

Tabelle 5.20. RECREATE VIEW Statement-Parameter

Parameter Beschreibung
viewname View-Name, maximal 31 Zeichen
select_statement SELECT-Statement
full_column_list Die Liste der Spalten in der View
colname Spaltenname der View. Duplikate sind nicht zulässig.


Erstellt oder erstellt eine Ansicht neu. Wenn bereits eine Ansicht mit diesem Namen vorhanden ist, versucht die Engine, sie vor dem Erstellen der neuen Instanz zu löschen. Wenn die vorhandene Sicht aufgrund von Abhängigkeiten oder unzureichenden Rechten nicht gelöscht werden kann, schlägt RECREATE VIEW mit einem Fehler fehl.

Beispiel:  Die neue View PRICE_WITH_MARKUP erstellen oder neu erstellen, falls diese bereits vorhanden ist.

RECREATE VIEW PRICE_WITH_MARKUP (
  CODE_PRICE,
  COST,
  COST_WITH_MARKUP
) AS
SELECT
  CODE_PRICE,
  COST,
  COST * 1.15
FROM PRICE;
          

Siehe auch:  CREATE VIEW, DROP VIEW, CREATE OR ALTER VIEW

Zurück: INDEXFirebird Documentation IndexNach oben: Statements der Data Definition (DDL)Weiter: TRIGGER
Firebird Documentation IndexFirebird 2.5 SprachreferenzStatements der Data Definition (DDL) → VIEW