FirebirdSQL logo

Cette référence décrit le langage SQL pris en charge par Firebird.

Informations générales

Pour commencer, lisez quelques notes sur certaines des caractéristiques sous-jacentes à l’implémentation du langage de Firebird.

SQL Sous-ensembles

SQL comporte quatre sous-ensembles de SQL utilisés dans diverses applications :

DSQL

SQL dynamique.

PSQL

SQL procédurale.

ESQL

SQL embarquée.

ISQL

SQL interactive.

Dynamic SQL est une partie essentielle du langage qui est conforme à la partie 2 (SQL/Foundation – SQL/Basics) de la spécification SQL. DSQL est une construction transmise par les applications clientes à l’aide de l’API Firebird et traitée par le serveur de base de données.

SQL procédural est une extension de Dynamic SQL, qui contient en outre des instructions composites contenant des variables locales, des affectations, des boucles et d’autres constructions procédurales. PSQL fait référence à la partie 4 (SQL/PSM) de la spécification SQL. Initialement, l’extension PSQL n’était disponible que dans des modules (procédures et déclencheurs) stockés en permanence dans la base de données, mais relativement récemment, ils sont également devenus disponibles dans Dynamic SQL (voir EXECUTE BLOCK).

Embedded SQL définit un sous-ensemble de DSQL pris en charge par Firebird GPRE. GPRE est une application de préprocesseur qui vous permet d’intégrer des constructions SQL dans votre langage de programmation immédiat (C, C++, Pascal, Cobol, etc.) et de traiter ces constructions intégrées dans les appels d’API Firebird corrects. Notez qu’ESQL ne prend en charge qu’un sous-ensemble de constructions et d’expressions DSQL.

Interactive SQL fait référence à un langage qui peut être utilisé pour travailler avec l’application de ligne de commande Firebird ISQL pour un accès interactif aux bases de données. isql est une application cliente régulière. Pour lui, le langage habituel est le langage DSQL. Cependant, l’application prend en charge quelques commandes supplémentaires.

Les sous-ensembles de langage de DSQL et PSQL sont entièrement représentés dans ce guide. De la boîte à outils, ni ESQL ni ISQL ne sont décrits séparément ici, sauf indication explicite.

SQL Dialectes

SQL Dialectes — Le dialecte SQL est un terme qui définit les fonctionnalités spécifiques du langage SQL qui sont disponibles lorsqu’il accède à une base de données. Le dialecte SQL peut être défini à la fois au niveau de la base de données et au niveau de la connexion à la base de données. Trois dialectes sont actuellement disponibles :

  • Dialect 1 est destiné uniquement à la compatibilité descendante avec les bases de données héritées des versions très anciennes d’InterBase, v.5 et inférieures. Les bases de données Dialect 1 conservent certaines fonctionnalités linguistiques qui diffèrent de Dialect 3, qui est utilisé par défaut pour les bases de données Firebird.

    • Les informations de date et d’heure sont stockées dans le fichier . Vous disposez d’un type de données identique à .DATETIMESTAMPDATE

    • Les guillemets doubles peuvent être utilisés comme alternative aux apostrophes pour séparer les données de chaîne. Ceci est contraire à la norme SQL - les guillemets doubles sont réservés à des fins syntaxiques spéciales dans SQL standard et le dialecte 3. Par conséquent, les chaînes avec des guillemets doubles doivent être évitées.

    • La précision des types de données est inférieure à celle du 3ème dialecte et si la valeur de précision est supérieure à 9, Firebird stocke ces valeurs sous forme de longues valeurs en virgule flottante.NUMERICDECIMAL

    • BIGINT n’est pas un type de données disponible.

    • Les identificateurs ne respectent pas la casse et doivent toujours suivre les règles des identificateurs habituels — voir la section Identificateurs ci-dessous.

    • Bien que les valeurs du générateur soient stockées sous forme d’entiers 64 bits, une requête client Dialect 1, par exemple, renvoie une valeur de générateur tronquée à 32 bits.SELECT GEN_ID (MyGen, 1)

  • Le dialecte 2 n’est disponible que dans la connexion client à Firebird et ne peut pas être appliqué à la base de données. Il est destiné à vous aider à déboguer en cas d’éventuels problèmes d’intégrité des données lors de la migration du dialecte 1 vers 3.

  • Dans les bases de données dialect 3 :

    • Les nombres des types de données DECIMAL et NUMERIC sont stockés sous forme de longues valeurs à point fixe (entiers évolutifs) si la précision du nombre est supérieure à 9.

    • Le type de données TIME est disponible et utilisé pour stocker la valeur de temps uniquement.

    • Le type de données DATE stocke uniquement les informations de date.

    • Le type de données BIGINT est disponible en tant que type de données entier 64 bits.

    • Les guillemets doubles peuvent être utilisés, mais uniquement pour les identificateurs sensibles à la casse, pas pour les données de chaîne.

    • Toutes les chaînes doivent être séparées par des guillemets simples (apostrophes).

    • Les valeurs du générateur sont renvoyées sous la forme d’un entier de 64 bits.

Important

Pour les bases de données et les applications nouvellement développées, il est fortement recommandé d’utiliser le 3ème dialecte. Le dialecte lors de la connexion à une base de données doit être le même que celui de la base de données. Une exception est le cas de la migration du 1er vers le 3ème dialecte, lorsque le 2ème dialecte est utilisé dans la chaîne de connexion à la base de données.

Par défaut, ce didacticiel décrit la sémantique SQL du troisième dialecte, sauf si le texte spécifie explicitement un dialecte.

Actions en cas d’erreurs

Le traitement de toute instruction est terminé avec succès ou interrompu en raison d’une erreur causée par certaines conditions. La gestion des erreurs peut être effectuée à la fois dans l’application cliente et côté serveur à l’aide de SQL.

Informations de base: opérateurs, phrases, mots-clés

La construction de base de SQL est l’instruction. Un opérateur décrit ce qu’un système de gestion de base de données doit faire avec un objet de données ou de métadonnées spécifique, généralement sans spécifier exactement comment cela doit être fait. Les opérateurs assez complexes contiennent des constructions plus simples - clauses et options.

Suggestions (clause)

Une phrase décrit une construction terminée dans un opérateur. Par exemple, la clause WHERE de l’instruction SELECT et d’un certain nombre d’autres opérateurs (UPDATE, DELETE) spécifie les critères de recherche des données dans la ou les tables à sélectionner, modifier et supprimer. La clause ORDER BY spécifie les caractéristiques d’ordre de la sortie, du résultat et du jeu de données.

Alternatives (options)

Les alternatives, étant les constructions les plus simples, sont spécifiées à l’aide de mots-clés spécifiques et déterminent certaines caractéristiques supplémentaires des éléments de la proposition (la licéité de la duplication des données, les cas d’utilisation, etc.).

Mots-clés (keywords)

En SQL, il y a des mots-clés et des mots réservés. Les mots-clés sont tous les mots inclus dans le vocabulaire (vocabulaire) du langage SQL. Les mots-clés peuvent (mais ne sont pas recommandés) être utilisés comme noms, identificateurs d’objet de base de données, variables internes et paramètres. Les mots réservés sont des mots-clés qui ne peuvent pas être utilisés comme noms d’objets de base de données, variables ou noms de paramètres.

Par exemple, l’instruction suivante sera exécutée sans erreur car ABS est un mot clé, mais pas un mot réservé.

CREATE TABLE T (ABS INT NOT NULL);

Lorsque vous exécutez une telle instruction, vous obtenez une erreur car ADD est un mot clé et un mot réservé.

CREATE TABLE T (ADD INT NOT NULL);

Une liste de réservés et de mots-clés est fournie dans l’application Réservés et mots-clés.

Identifiants

Tous les objets de base de données ont des noms, parfois appelés identificateurs. La longueur maximale de l’identificateur est de 63 caractères. Il existe deux types d’identificateurs : les noms qui sont similaires dans la forme aux noms de variables dans les langages de programmation courants, et les noms délimités, qui sont une caractéristique distinctive du langage SQL.

Règles relatives aux identificateurs réguliers

  • La longueur de l’identificateur ne doit pas dépasser 63 caractères

  • Un nom commun doit commencer par une lettre de l’alphabet latin (les 7 premiers bits de la table ASCII), qui peut être suivie de lettres (de l’alphabet latin), de chiffres, d’un trait de soulignement et d’un signe dollar. Dans le nom, vous ne pouvez pas utiliser de lettres cyrilliques, d’espaces, d’autres caractères spéciaux. Un tel nom est insensible à la casse, il peut être écrit en minuscules et en majuscules. Les noms suivants sont les mêmes du point de vue du système :

    fullname
    FULLNAME
    FuLlNaMe
    FullName
Syntaxe des identificateurs réguliers
<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

Règles relatives aux identificateurs délimités

  • La longueur de l’identificateur ne doit pas dépasser 63 caractères.

  • Le nom doit être placé entre guillemets doubles, par exemple."anIdentifier"

  • L’identificateur peut contenir n’importe quel caractère du jeu de caractères UTF-8, y compris des caractères accentués, des espaces et des caractères spéciaux.

  • L’identificateur peut être un mot réservé.

  • Les identificateurs délimités sont sensibles à la casse dans tous les contextes.

  • Les espaces de fin dans les noms délimités sont ignorés, comme pour toute constante de chaîne.

  • Les identificateurs délimités ne sont disponibles que dans le dialecte 3. Pour plus d’informations sur les dialectes, consultez Dialectes SQL

Syntaxe d’identificateur délimité
<delimited name> ::= "<permitted_character>[<permitted_character> ...]"
Note

Un identificateur délimité, tel que , est le même que les identificateurs réguliers, , , etc. La raison en est que Firebird stocke les identificateurs réguliers en majuscules, quelle que soit la façon dont ils ont été définis ou déclarés. Les identificateurs délimités sont toujours conservés car ils ont été définis ou déclarés. Par conséquent, l’identificateur (entre guillemets) est différent de (sans guillemets), qui est stocké dans les métadonnées sous la forme ."FULLNAME" - FULLNAME - fullname - FullName - "FullName" - FULLNAME

Littéraux

Les littéraux sont utilisés pour représenter directement les données. Voici des exemples de littéraux standard :

  • entiers — 0, -34, 45, 0X080000000;

  • les nombres à points fixes sont 0,0, -3,14.

  • matériel — 3.23e-23;

  • string — 'text', 'don’t!', Q'{don’t!}';

  • les chaînes binaires sont x'48656C6C6F20776F726C64';

  • date — DATE '10.01.2014';

  • heure — HEURE '15:12:56';

  • date et heure — TIMESTAMP '10.01.2014 13:32:02';

  • logique — VRAI, FAUX, INCONNU;

  • l’état non défini est null.

Pour plus d’informations sur les littéraux pour chaque type de données, consultez Types et sous-types de données.

Opérateurs et caractères spéciaux

Il existe un ensemble de caractères spéciaux utilisés comme délimiteurs.

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

Certains de ces caractères, ainsi que leurs combinaisons, peuvent être utilisés comme opérateurs (arithmétique, chaîne, logique), comme délimiteurs de commandes SQL, comme identificateurs de quota et pour indiquer les limites des littéraux de chaîne ou des commentaires.

Syntaxe de l’opérateur
<operator> ::=
    <string concatenation operator>
  | <arithmetic operator>
  | <comparison operator>
  | <logical operator>

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

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

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

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

Pour plus d’informations sur les opérateurs, consultez Expressions.

Commentaires

Dans les scripts SQL, les instructions SQL et les modules PSQL, il peut y avoir des commentaires. Un commentaire est un texte libre spécifié par l’utilisateur, destiné à expliquer le fonctionnement de parties individuelles du programme. L’analyseur ignore le texte du commentaire.

Firebird prend en charge deux types de commentaires : le bloc et le commentaire à ligne unique.

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

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

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

Les commentaires de bloc commencent par des caractères /* et se terminent par des caractères`*/. Les commentaires de bloc peuvent contenir du texte de longueur arbitraire et s’étendre sur plusieurs lignes./*``*/`

Les commentaires d’une seule ligne commencent par des caractères -- et sont valides jusqu’à la fin de la ligne en cours.

Example 1. Exemple 1. Commentaires
CREATE PROCEDURE P(APARAM INT)
  RETURNS (B INT)
AS
BEGIN
  /* Ce texte ne sera pas pris en compte.
      pendant le déroulement de la procédure, car est un commentaire
  */
  B = A + 1; -- Commentaire d'une ligne
  SUSPEND;
END