FirebirdSQL logo
 INDEXTRIGGER 

WITH CHECK OPTION

Die optionale WITH CHECK OPTION-Klausel erfordert eine aktualisierbare Ansicht, um zu prüfen, ob neue oder aktualisierte Daten die in der WHERE-Klausel der SELECT-Anweisung angegebene Bedingung erfüllen.Bei jedem Versuch, einen neuen Datensatz einzufügen oder einen bestehenden zu aktualisieren, wird geprüft, ob der neue oder aktualisierte Datensatz die 'WHERE'-Kriterien erfüllen würde.Wenn sie die Prüfung nicht bestehen, wird die Operation nicht ausgeführt und eine entsprechende Fehlermeldung 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-Hauptanweisung einzuschränken.Andernfalls wird eine Fehlermeldung zurückgegeben.

Important
Bitte beachten Sie:

Wenn WITH CHECK OPTION verwendet wird, prüft die Engine die Eingabe gegen die WHERE-Klausel, bevor sie irgendetwas an die Basisrelation übergibt.Wenn die Prüfung der Eingabe fehlschlägt, werden daher keine Standardklauseln oder Trigger für die Basisrelation, die möglicherweise zur Korrektur der Eingabe entworfen wurden, in Aktion treten.

Darüber hinaus werden View-Felder, die in der INSERT-Anweisung weggelassen wurden, als NULLs an die Basisrelation übergeben, unabhängig davon, ob sie in der WHERE-Klausel vorhanden oder nicht vorhanden sind.Daher werden die für solche Felder definierten Basistabellen-Standardwerte nicht angewendet.Trigger hingegen werden wie erwartet ausgelöst und funktionieren.

Bei Ansichten, die nicht über WITH CHECK OPTION verfügen, werden Felder, die in der INSERT-Anweisung weggelassen wurden, überhaupt nicht an die Basisrelation übergeben, sodass alle Standardwerte angewendet werden.

Wer kann eine Ansicht erstellen?

Die CREATE VIEW-Anweisung kann ausgeführt werden durch:

Der Ersteller einer Ansicht wird ihr Eigentümer.

Um eine Ansicht zu erstellen, benötigt ein Nicht-Administrator-Benutzer außerdem mindestens 'SELECT'-Zugriff auf die zugrunde liegende(n) Tabelle(n) und/oder Ansicht(en) und das 'EXECUTE'-Privileg für alle beteiligten auswählbaren gespeicherten Prozeduren.

Um Einfügungen, Aktualisierungen und Löschungen über die Ansicht zu ermöglichen, muss der Ersteller/Eigentümer auch die entsprechenden INSERT, UPDATE und DELETE-Rechte für das/die zugrunde liegende(n) Objekt(e) besitzen.

Anderen Benutzern Berechtigungen für die Ansicht zu erteilen ist nur möglich, wenn der Ansichtsbesitzer diese Berechtigungen für die zugrunde liegenden Objekte hat WITH GRANT OPTION.Dies ist immer dann der Fall, wenn der View-Eigentümer auch der Eigentümer der zugrunde liegenden Objekte ist.

===Beispiele für das Erstellen von Ansichten

  1. Erstellen einer Ansicht, die die Spalten JOB_CODE und JOB_TITLE nur für die Jobs zurückgibt, bei denen MAX_SALARY weniger als 15.000 USD beträgt.

    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 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 die Bedingung MAX_SALARY < 15000 geprüft.Wenn die Bedingung nicht wahr ist, wird die Einfüge-/Aktualisierungsoperation abgelehnt.

    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 Aliasen 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;

docnext count = 10

ALTER VIEW

Verwendet für

Ändern einer vorhandenen Ansicht

Verfügbar in

DSQL

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

<full_column_list> ::= (colname [, colname ...])
Table 1. ALTER VIEW-Anweisungsparameter
Parameter Beschreibung

viewname

Name einer existierenden Ansicht

select_statement

SELECT-Anweisung

full_column_list

Die Liste der Spalten in der Ansicht

colname

Spaltennamen anzeigen.Doppelte Spaltennamen sind nicht zulässig.

Verwenden Sie die Anweisung ALTER VIEW, um die Definition einer bestehenden Ansicht zu ändern.Berechtigungen für Ansichten bleiben erhalten und Abhängigkeiten werden nicht beeinflusst.

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

Caution

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

Wer kann eine Ansicht ändern?

Die ALTER VIEW-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Ansicht

  • Benutzer mit der Berechtigung ALTER ANY VIEW

Beispiel mit ALTER VIEW

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

CREATE OR ALTER VIEW

Verwendet für

Erstellen einer neuen Ansicht oder Ändern einer vorhandenen Ansicht.

Verfügbar in

DSQL

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

<full_column_list> ::= (colname [, colname ...])
Table 1. CREATE OR ALTER VIEW-Anweisungsparameter
Parameter Beschreibung

viewname

Name einer Ansicht, die möglicherweise nicht vorhanden ist

select_statement

SELECT-Anweisung

full_column_list

Die Liste der Spalten in der Ansicht

colname

Spaltennamen anzeigen.Doppelte Spaltennamen sind nicht zulässig.

Verwenden Sie die Anweisung CREATE OR ALTER VIEW, um die Definition einer bestehenden 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 CREATE OR ALTER VIEW-Anweisung entspricht vollständig der von CREATE VIEW.

Beispiel für CREATE OR ALTER VIEW

Erstellen der neuen Ansicht PRICE_WITH_MARKUP-Ansicht oder Ändern, wenn sie 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;

DROP VIEW

Verwendet für

Löschen einer Ansicht

Verfügbar in

DSQL

Syntax
DROP VIEW viewname
Table 1. DROP VIEW-Anweisungsparameter
Parameter Beschreibung

viewname

Name der Ansicht

Die DROP VIEW-Anweisung löscht (löscht) eine vorhandene Ansicht.Die Anweisung schlägt fehl, wenn die Ansicht Abhängigkeiten aufweist.

Wer kann eine Ansicht löschen?

Die DROP VIEW-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Ansicht

  • Benutzer mit dem Privileg DROP ANY VIEW

Beispiel

Löschen der Ansicht PRICE_WITH_MARKUP
DROP VIEW PRICE_WITH_MARKUP;

RECREATE VIEW

Verwendet für

Erstellen einer neuen Ansicht oder Neuerstellen einer vorhandenen Ansicht

Verfügbar in

DSQL

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

<full_column_list> ::= (colname [, colname ...])
Table 1. RECREATE VIEW-Anweisungsparameter
Parameter Beschreibung

viewname

Name der Ansicht (View).Die maximale Länge beträgt 63 Zeichen

select_statement

SELECT-Anweisung

full_column_list

Die Liste der Spalten in der Ansicht

colname

Spaltennamen anzeigen.Doppelte Spaltennamen sind nicht zulässig.

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

Beispiel für RECREATE VIEW

Neue Ansicht PRICE_WITH_MARKUP-Ansicht erstellen oder neu erstellen, falls bereits vorhanden
RECREATE VIEW PRICE_WITH_MARKUP (
  CODE_PRICE,
  COST,
  COST_WITH_MARKUP
) AS
SELECT
  CODE_PRICE,
  COST,
  COST * 1.15
FROM PRICE;