FirebirdSQL logo

Fehlerbedingungen

Die Verarbeitung jeder SQL-Anweisung wird entweder erfolgreich abgeschlossen oder schlägt aufgrund einer bestimmten Fehlerbedingung fehl.Die Fehlerbehandlung kann sowohl auf der Clientseite der Anwendung als auch auf der Serverseite mit PSQL erfolgen.

Grundelemente: Aussagen, Klauseln, Schlüsselwörter

Das primäre Konstrukt in SQL ist die Anweisung.Eine Anweisung definiert, was das Datenbankverwaltungssystem mit einem bestimmten Daten- oder Metadatenobjekt tun soll.Komplexere Anweisungen enthalten einfachere Konstrukte — Klauseln und Optionen.

Klauseln

Eine Klausel definiert eine bestimmte Art von Direktive in einer Anweisung.Zum Beispiel spezifiziert die Klausel WHERE in einer SELECT-Anweisung und in einigen anderen Datenmanipulationsanweisungen (UPDATE, DELETE) Kriterien zum Durchsuchen einer oder mehrerer Tabellen nach den Zeilen, die ausgewählt, aktualisiert oder gelöscht werden sollen .Die ORDER BY-Klausel gibt an, wie die Ausgabedaten — die Ergebnismenge — sortiert werden sollen.

Optionen

Optionen sind die einfachsten Konstrukte und werden in Verbindung mit bestimmten Schlüsselwörtern angegeben, um eine Qualifizierung für Klauselelemente bereitzustellen.Wenn alternative Optionen verfügbar sind, ist es üblich, dass eine von ihnen die Standardeinstellung ist, die verwendet wird, wenn für diese Option nichts angegeben ist.Zum Beispiel gibt die SELECT-Anweisung alle Zeilen zurück, die den Suchkriterien entsprechen, es sei denn, die DISTINCT-Option beschränkt die Ausgabe auf nicht duplizierte Zeilen.

Schlüsselwörter

Alle Wörter, die im SQL-Lexikon enthalten sind, sind Schlüsselwörter.Einige Schlüsselwörter sind reserviert, was bedeutet, dass ihre Verwendung als Bezeichner für Datenbankobjekte, Parameternamen oder Variablen in einigen oder allen Kontexten verboten ist.Nicht reservierte Schlüsselwörter können als Bezeichner verwendet werden, obwohl dies nicht empfohlen wird.Von Zeit zu Zeit können nicht reservierte Schlüsselwörter reserviert werden, wenn eine neue Sprachfunktion eingeführt wird.

Die folgende Anweisung wird beispielsweise ohne Fehler ausgeführt, da ABS zwar ein Schlüsselwort, aber kein reserviertes Wort ist.

CREATE TABLE T (ABS INT NOT NULL);

Im Gegenteil, die folgende Anweisung gibt einen Fehler zurück, da ADD sowohl ein Schlüsselwort als auch ein reserviertes Wort ist.

CREATE TABLE T (ADD INT NOT NULL);

Siehe die Liste der reservierten Wörter und Schlüsselwörter im Kapitel Reservierte Wörter und Schlüsselwörter.

docnext count = 6

Bezeichner

Alle Datenbankobjekte haben Namen, die oft als Identifier bezeichnet werden.Die maximale Bezeichnerlänge beträgt 63 Zeichen Zeichensatz UTF8 (252 Byte).

Note

Es ist möglich, die tatsächliche maximale Identifier-Länge durch Konfiguration einzuschränken.Weitere Informationen finden Sie in den Firebird 4.0 Versionshinweisen.In dieser Sprachreferenz gehen wir von der Standardkonfiguration von 63 Zeichen (252 Byte) aus.

Als Bezeichner sind zwei Arten von Namen gültig: reguläre Namen, ähnlich den Variablennamen in regulären Programmiersprachen, und getrennte Namen, die für SQL spezifisch sind.Um gültig zu sein, muss jeder Bezeichnertyp einer Reihe von Regeln entsprechen, wie folgt:

Regeln für reguläre Objektbezeichner

  • Länge darf 63 Zeichen nicht überschreiten

  • Der Name muss mit einem alphabetischen 7-Bit-ASCII-Zeichen ohne Akzent beginnen.Es können weitere 7-Bit-ASCII-Buchstaben, Ziffern, Unterstriche oder Dollarzeichen folgen.Andere Zeichen, einschließlich Leerzeichen, sind nicht gültig.Bei dem Namen wird die Groß-/Kleinschreibung nicht beachtet, dh er kann in Groß- oder Kleinschreibung deklariert und verwendet werden.Somit sind aus Sicht des Systems die folgenden Namen gleich:

    fullname
    FULLNAME
    FuLlNaMe
    FullName
Reguläre Namenssyntax
<name> ::=
  <letter> | <name><letter> | <name><digit> | <name>_ | <name>$

<letter> ::= <upper letter> | <lower letter>

<upper letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M |
                   N | O | P | Q | R | S | T | U | V | W | X | Y | Z

<lower letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m |
                   n | o | p | q | r | s | t | u | v | w | x | y | z

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Regeln für getrennte Objektbezeichner

  • Länge darf 63 Zeichen im Zeichensatz UTF8 (252 Byte) nicht überschreiten.Bezeichner werden im Zeichensatz UTF8 gespeichert, dh Zeichen außerhalb des ASCII-Bereichs werden mit 2 bis 4 Byte gespeichert.

  • Der gesamte String muss in doppelte Anführungszeichen eingeschlossen werden, z.B. "anIdentifier"

  • Es kann jedes Zeichen aus dem UTF8-Zeichensatz enthalten, einschließlich Akzentzeichen, Leerzeichen und Sonderzeichen

  • Ein Bezeichner kann ein reserviertes Wort sein

  • Bei Bezeichnern mit Trennzeichen muss die Groß-/Kleinschreibung in allen Kontexten beachtet werden

  • Nachgestellte Leerzeichen in durch Trennzeichen getrennten Namen werden wie bei jeder Stringkonstanten entfernt

  • Begrenzte Bezeichner sind nur in Dialekt 3 verfügbar.Weitere Informationen zu Dialekten finden Sie unter [fblangref40-structure-dialects-de]

Getrennte Namenssyntax
<delimited name> ::= "<permitted_character>[<permitted_character> ...]"
Note

Ein durch Trennzeichen getrennter Bezeichner wie "FULLNAME" entspricht den regulären Bezeichnern FULLNAME, fullname, FullName und so weiter.Der Grund dafür ist, dass Firebird reguläre Bezeichner in Großbuchstaben speichert, unabhängig davon, wie sie definiert oder deklariert wurden.Begrenzte Bezeichner werden immer nach der genauen Schreibweise ihrer Definition oder Deklaration gespeichert.Somit unterscheidet sich "FullName" (quoted) von FullName (unquoted, d.h. regulär), das als FULLNAME in den Metadaten gespeichert wird.

Literale

Literale werden verwendet, um Daten direkt darzustellen.Beispiele für Standardtypen von Literalen sind:

integer        - 0, -34, 45, 0X080000000;
fixed-point    - 0.0, -3.14
floating-point - 3.23e-23;
string         - 'text', 'don''t!';
binary string  - x'48656C6C6F20776F726C64'
date           - DATE '2018-01-19';
time           - TIME '15:12:56';
timestamp      - TIMESTAMP '2018-01-19 13:32:02';
boolean        - true, false, unknown
null state     - null

Details zu Literalen für jeden Datentyp werden im Abschnitt Konstanten des Kapitels Allgemeine Sprachelemente behandelt.

Operatoren und Sonderzeichen

Eine Reihe von Sonderzeichen ist für die Verwendung als Operatoren oder Trennzeichen reserviert.

<special char> ::=
    <space> | " | % | & | ' | ( | ) | * | + | , | -
  | . | / | : | ; | < | = | > | ? | [ | ] | ^ | { | }

Einige dieser Zeichen können einzeln oder in Kombination als Operatoren (arithmetisch, string, logisch), als Trennzeichen für SQL-Befehle, als Anführungszeichen für Bezeichner und als Begrenzung von String-Literalen oder Kommentaren verwendet werden.

Operatorsyntax
<operator> ::=
    <string concatenation operator>
  | <arithmetic operator>
  | <comparison operator>
  | <logical operator>

<string concatentation operator> ::= "||"

<arithmetic operator> ::= * | / | + | - |

<comparison operator> ::=
    =  | <> | != | ~= | ^= | > | < | >= | <=
  | !> | ~> | ^> | !< | ~< | ^<

<logical operator> ::= NOT | AND | OR

Weitere Informationen zu Operatoren finden Sie unter Ausdrücke.

Bemerkungen

Kommentare können in SQL-Skripten, SQL-Anweisungen und PSQL-Modulen vorhanden sein.Ein Kommentar kann ein beliebiger Text sein, der vom Code-Autor angegeben wird und normalerweise verwendet wird, um zu dokumentieren, wie bestimmte Teile des Codes funktionieren.Der Parser ignoriert den Text von Kommentaren.

Firebird unterstützt zwei Arten von Kommentaren: block und in-line.

Syntax
<comment> ::= <block comment> | <single-line comment>

<block comment> ::=
  /* <character>[<character> …] */

<single-line comment> ::=
  -- <character>[<character> …]<end line>

Blockkommentare beginnen mit dem Zeichenpaar /* und enden mit dem Zeichenpaar */.Text in Blockkommentaren kann beliebig lang sein und mehrere Zeilen belegen.

Inline-Kommentare beginnen mit einem Bindestrich-Paar -- und werden bis zum Ende der aktuellen Zeile fortgesetzt.

Beispiele
CREATE PROCEDURE P(APARAM INT)
  RETURNS (B INT)
AS
BEGIN
  /* This text will be ignored during the execution of the statement
     since it is a comment
  */
  B = A + 1; -- In-line comment
  SUSPEND;
END