FirebirdSQL logo

Un domaine est un objet de base de données relationnelle qui peut être créé en spécifiant certaines caractéristiques, puis en faisant référence au domaine lors de la définition des colonnes de la table, de la déclaration des variables locales, des arguments d’entrée et de sortie dans les modules PSQL.

Cette section traite de la syntaxe des opérateurs de création, de modification et de suppression de domaines. Une description détaillée des domaines et de leur utilisation se trouve dans Custom Data Types — Domains.

CREATE DOMAIN

Destination

Création d’un nouveau domaine.

Disponible en

DSQL, ESQL.

Syntaxe
CREATE DOMAIN name [AS] <datatype>
  [DEFAULT {<literal> | NULL | <context_var>}]
  [NOT NULL] [CHECK (<dom_condition>)]
  [COLLATE collation_name];

<datatype> ::=
    <scalar_datatype> | <blob_datatype> | <array_datatype>

<scalar_datatype> ::= Voir Syntaxe des types de données scalaires.

<blob_datatype> ::= Voir Syntaxe du type de données BLOB.

<array_datatype> ::= Voir syntaxe des tableaux.

<dom_condition> ::=
    <val> <operator> <val>
  | <val> [NOT] BETWEEN <val> AND <val>
  | <val> [NOT] IN (<val> [, <val> ...] | <select_list>)
  | <val> IS [NOT] NULL
  | <val> IS [NOT] DISTINCT <val>
  | <val> IS [NOT] {TRUE | FALSE | UNKNOWN}
  | <val> [NOT] CONTAINING <val>
  | <val> [NOT] STARTING [WITH] <val>
  | <val> [NOT] LIKE <val> [ESCAPE <val>]
  | <val> [NOT] SIMILAR TO <val> [ESCAPE <val>]
  | <val> <operator> {ALL | SOME | ANY} (<select_list>)
  | [NOT] EXISTS (<select_expr>)
  | [NOT] SINGULAR (<select_expr>)
  | (<dom_condition>)
  | NOT <dom_condition>
  | <dom_condition> OR <dom_condition>
  | <dom_condition> AND <dom_condition>


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

<val> ::= {
    VALUE
  | <literal>
  | <context_var>
  | <expression>
  | NULL
  | NEXT VALUE FOR genname
  | GEN_ID(genname, <val>)
  | CAST(<val> AS <cast_type>)
  | (<select_one>)
  | func(<val> [, <val> ...])
}

<cast_type> ::=
   <datatype>
  | [TYPE OF] domain
  | TYPE OF COLUMN rel.col
Table 1. Paramètres de l’opérateur CREATE DOMAIN
Paramètre Description

name

Nom de domaine. Peut contenir jusqu’à 63 caractères.

datatype

Type de données SQL.

literal

Literal.

context_var

Toute variable contextuelle dont le type est compatible avec le type de données du domaine.

dom_condition

Condition du domaine.

collation_name

Ordre de tri.

charset

Jeu de caractères.

select_one

L’opérateur SELECT sélectionne une colonne et renvoie une seule ligne.

select_list

L’opérateur SELECT sélectionne une colonne et retourne zéro ou plusieurs lignes.

select_expr

L’opérateur SELECT sélectionne plusieurs colonnes et renvoie zéro ou plusieurs lignes.

expression

Expression.

genname

Le nom de la séquence (générateur).

func

Fonction scalaire.

L’opérateur CREATE DOMAIN crée un nouveau domaine.

Tout type de données SQL peut être spécifié comme type de domaine de base.

Détails pour un type spécifique

Arrays
  • Si le domaine doit être un tableau, le type de base peut être n’importe quel type de données SQL, sauf BLOB et tableau.

  • Les tailles des tableaux sont indiquées entre crochets. (Dans la syntaxe, ces crochets sont placés entre guillemets pour les distinguer des crochets indiquant des éléments facultatifs de la syntaxe).

  • Un ou deux entiers sont spécifiés pour chaque dimension du tableau, qui définissent les limites inférieure et supérieure de la plage d’index :

    • Par défaut, les tableaux commencent à 1. La limite inférieure est implicite, et seule la limite supérieure doit être spécifiée. Lorsqu’un seul nombre inférieur à 1 est spécifié, cela définit l’intervalle num . 1, et un nombre supérieur à 1 définit un intervalle de 1 …​ num.

    • Lorsque deux nombres séparés par un deux-points (':) et un espace facultatif sont spécifiés, si le second est supérieur au premier, cela définit explicitement la plage d’index. L’une ou les deux limites peuvent être inférieures à zéro si la limite supérieure est supérieure à la limite inférieure.

  • Si le tableau a plusieurs dimensions, les définitions de plage pour chaque dimension doivent être séparées par des virgules et des espaces facultatifs.

  • Les index sont vérifiés seulement si une valeur de tableau existe réellement.

  • Cela signifie que les messages d’erreur concernant les index invalides ne seront pas renvoyés si la sélection d’un élément particulier du tableau ne renvoie rien ou si le champ du tableau est NULL.

Types de chaînes

Pour les types CHAR, VARCHAR et BLOB avec le sous-type texte, un jeu de caractères peut être spécifié dans la phrase CHARACTER SET. Si aucun jeu de caractères n’est spécifié, la valeur par défaut est le jeu de caractères qui a été spécifié lors de la création de la base de données.

Warning

Si aucun jeu de caractères n’a été spécifié lors de la création de la base de données, le jeu de caractères par défaut NONE est accepté lors de la création du domaine. Dans ce cas, les données sont stockées et récupérées telles qu’elles ont été soumises. Une colonne basée sur un tel domaine peut être chargée avec des données dans n’importe quel encodage, mais il n’est pas possible de charger ces données dans une colonne avec un encodage différent. La translittération n’est pas effectuée entre les codages source et destination, ce qui peut entraîner des erreurs.

La phrase DEFAULT

La clause optionnelle DEFAULT vous permet de spécifier une valeur par défaut pour un domaine. Cette valeur sera placée dans la colonne de la table qui fait référence à ce domaine lors de l’exécution de l’instruction INSERT si aucune valeur n’est spécifiée pour cette colonne. Les variables locales et les arguments du module PSQL qui font référence à ce domaine seront initialisés avec la valeur par défaut. La valeur par défaut peut être un littéral compatible avec le type, une valeur NULL inconnue et une variable contextuelle dont le type est compatible avec celui du domaine.

Restriction NOT NULL

La proposition NOT NULL empêche les colonnes et les variables basées sur le domaine de se voir attribuer des valeurs NULL.

La restriction CHECK

La clause optionnelle CHECK spécifie une restriction de domaine. Une restriction de domaine spécifie une condition qui doit être satisfaite par les valeurs des colonnes ou des variables de la table qui se réfèrent à ce domaine. La condition doit être placée entre parenthèses. Une condition est une expression logique, également appelée prédicat, qui peut renvoyer VRAI, FAUX ou INCONNU. Une condition est satisfaite si le prédicat renvoie VRAI ou INCONNU (équivalent à NULL). Si le prédicat renvoie FALSE, la valeur ne sera pas acceptée.

Mot clé VALUE

Le mot clé VALUE dans une contrainte de domaine est un substitut pour une colonne de table qui est basée sur le domaine donné ou une variable de module PSQL. Il contient la valeur attribuée à la variable ou à la colonne du tableau. Le mot-clé VALUE peut être utilisé n’importe où dans la contrainte CHECK, mais il est généralement utilisé sur le côté gauche de la condition.

COLLATE

La clause facultative COLLATE vous permet de spécifier un ordre de tri si le domaine est basé sur l’un des types de données de type chaîne (sauf BLOB). Si aucun ordre de tri n’est spécifié, l’ordre de tri par défaut est supposé avoir été omis pour le jeu de tri spécifié lors de la création du domaine.

Qui peut créer un domaine ?

L’opérateur CREATE DOMAIN peut être utilisé par:

L’utilisateur qui crée un domaine devient le propriétaire de ce domaine.

Exemples

Example 1. Créer un domaine qui peut prendre des valeurs supérieures à 1000.
CREATE DOMAIN CUSTNO AS
INTEGER DEFAULT 10000
CHECK (VALUE > 1000);
Example 2. Créer un domaine qui peut prendre les valeurs "Oui" et "Non".
CREATE DOMAIN D_BOOLEAN AS
CHAR(3) CHECK (VALUE IN ('Oui', 'Non'));
Example 3. Création d’un domaine avec le jeu de caractères UTF8 et l’ordre de tri UNICODE_CI_AI.
CREATE DOMAIN FIRSTNAME AS
VARCHAR(30) CHARACTER SET UTF8
COLLATE UNICODE_CI_AI;
Example 4. Création d’un domaine avec une valeur par défaut.
CREATE DOMAIN D_DATE AS
DATE DEFAULT CURRENT_DATE
NOT NULL;
Example 5. Création d’un domaine défini comme un tableau de 2 éléments.

Création d’un domaine défini comme un tableau de 2 éléments de type NUMERIC(18, 3), en numérotant les éléments en commençant par 1.

CREATE DOMAIN D_POINT AS
NUMERIC(18, 3) [2];
Note

Vous pouvez uniquement utiliser des domaines définis comme un tableau pour définir les colonnes d’une table. Vous ne pouvez pas utiliser de tels domaines pour définir les variables locales et les arguments des modules PSQL.

Voir aussi :

ALTER DOMAIN, DROP DOMAIN.

ALTER DOMAIN

Destination

Modifier les caractéristiques actuelles d’un domaine ou le renommer.

Disponible en

DSQL, ESQL.

Syntaxe
ALTER DOMAIN domain_name
  [TO new_name]
  [TYPE <datatype>]
  [{SET DEFAULT {<literal> | NULL | <context_var>}} | DROP DEFAULT]
  [{SET | DROP} NOT NULL]
  [{ADD [CONSTRAINT] CHECK (<dom_condition>)} | DROP CONSTRAINT]

<datatype> ::=
    <scalar_datatype> | <blob_datatype> | <array_datatype>

<scalar_datatype> ::= Voir Syntaxe des types de données scalaires.

<blob_datatype> ::= Voir Syntaxe du type de données BLOB.

<array_datatype> ::= Voir syntaxe des tableaux.

<dom_condition> ::=
    <val> <operator> <val>
  | <val> [NOT] BETWEEN <val> AND <val>
  | <val> [NOT] IN (<val> [, <val> ...] | <select_list>)
  | <val> IS [NOT] NULL
  | <val> IS [NOT] DISTINCT <val>
  | <val> IS [NOT] {TRUE | FALSE | UNKNOWN}
  | <val> [NOT] CONTAINING <val>
  | <val> [NOT] STARTING [WITH] <val>
  | <val> [NOT] LIKE <val> [ESCAPE <val>]
  | <val> [NOT] SIMILAR TO <val> [ESCAPE <val>]
  | <val> <operator> {ALL | SOME | ANY} (<select_list>)
  | [NOT] EXISTS (<select_expr>)
  | [NOT] SINGULAR (<select_expr>)
  | (<dom_condition>)
  | NOT <dom_condition>
  | <dom_condition> OR <dom_condition>
  | <dom_condition> AND <dom_condition>


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

<val> ::=
    VALUE
  | <literal>
  | <context_var>
  | <expression>
  | NULL
  | NEXT VALUE FOR genname
  | GEN_ID(genname, <val>)
  | CAST(<val> AS <cast_type>)
  | (<select_one>)
  | func(<val> [, <val> ...])


<cast_type> ::=
   <datatype>
  | [TYPE OF] domain
  | TYPE OF COLUMN rel.col
Table 1. Paramètres de l’opérateur ALTER DOMAIN
Paramètre Description

domain_name

Nom de domaine.

new_name

Nouveau nom de domaine. Peut contenir jusqu’à 63 caractères.

datatype

Type de données SQL.

literal

Litéral.

context_var

Toute variable contextuelle dont le type est compatible avec le type de données du domaine.

dom_condition

Condition du domaine.

collation

Ordre de tri.

select_one

L’opérateur SELECT sélectionne une colonne et renvoie une seule ligne.

select_list

L’opérateur SELECT sélectionne une colonne et retourne zéro ou plusieurs lignes.

select_expr

L’opérateur SELECT sélectionne plusieurs colonnes et renvoie zéro ou plusieurs lignes.

expression

Expression.

genname

Le nom de la séquence (générateur).

func

Fonction scalaire.

L’instruction ALTER DOMAIN modifie les caractéristiques actuelles d’un domaine, y compris son nom. Un nombre quelconque de changements de domaine peut être effectué dans une seule instruction ALTER DOMAIN.

TO name

La suggestion TO vous permet de renommer un domaine. Un nom de domaine peut être modifié s’il n’y a pas de dépendances sur ce domaine, c’est-à-dire les colonnes des tables, les variables locales et les arguments des procédures faisant référence à ce domaine.

SET DEFAULT

La phrase SET DEFAULT permet de définir une nouvelle valeur par défaut. Si le domaine contenait déjà une valeur par défaut, la définition d’une nouvelle valeur par défaut ne nécessite pas la suppression préalable de l’ancienne.

DROP DEFAULT

La clause DROP DEFAULT supprime la valeur par défaut précédemment définie pour le domaine. Dans ce cas, la valeur par défaut devient NULL.

ADD CONSTRAINT CHECK

La phrase ADD [CONSTRAINT] CHECK ajoute une condition de restriction de domaine. Si le domaine contenait déjà une restriction CHECK, il faut d’abord la supprimer avec la phrase DROP CONSTRAINT.

TYPE

La suggestion TYPE vous permet de changer le type de domaine en un autre type valide. Tout type de modification qui entraînerait une perte de données n’est pas autorisé. Par exemple, le nombre de caractères du nouveau type de domaine ne peut pas être inférieur à celui qui a été défini précédemment.

Note

La modification du type n’est pas prise en charge pour le type BLOB et les tableaux.

SET NOT NULL

La phrase SET NOT NULL fixe une limite de NOT NULL pour le domaine. Dans ce cas, NULL n’est pas autorisé pour les variables et les colonnes basées sur le domaine.

Note

L’installation réussie d’une contrainte NOT NULL pour un domaine ne se produit qu’après une vérification complète des données des tables dont les colonnes sont basées sur le domaine. Cela peut prendre beaucoup de temps.

Warning

Si la description du domaine est modifiée, le code PSQL existant peut devenir invalide. Des informations sur la manière de détecter cela peuvent être trouvées dans Field RDB$VALID_BLR.

DROP NOT NULL

La phrase DROP NOT NULL supprime la restriction NOT NULL pour le domaine.

Ce qui ne peut pas changer ALTER DOMAIN

  • Si un domaine a été déclaré comme un tableau, alors ni son type ni sa dimension ne peuvent être modifiés. Il n’existe pas non plus de moyen de transformer un autre type en un type de tableau.

  • Il n’y a aucun moyen de modifier le tri par défaut. Dans ce cas, vous devez supprimer le domaine et le recréer avec les nouveaux attributs.

Qui peut changer le domaine ?

L’opérateur ALTER DOMAIN peut être exécuté :

  • Administrateurs

  • Le propriétaire du domaine ;

  • Les utilisateurs avec le privilège `ALTER ANY DOMAIN'

Exemples

Example 1. Modifiez la valeur par défaut du domaine.
ALTER DOMAIN CUSTNO
INTEGER DEFAULT 2000;
Example 2. Renommer un domaine.
ALTER DOMAIN D_BOOLEAN TO D_BOOL;
Example 3. Suppression de la valeur par défaut et ajout d’une limite pour le domaine.
ALTER DOMAIN D_DATE
DROP DEFAULT
ADD CONSTRAINT CHECK (VALUE >= date '01.01.2000');
Example 4. Modification de la restriction de domaine.
ALTER DOMAIN D_DATE
DROP CONSTRAINT;

ALTER DOMAIN D_DATE
ADD CONSTRAINT CHECK
(VALUE BETWEEN date '01.01.1900' AND date '31.12.2100');
Example 5. Changer le type de domaine.
ALTER DOMAIN FIRSTNAME
TYPE VARCHAR(50) CHARACTER SET UTF8;
Example 6. Ajout d’une restriction NOT NULL au domaine.
ALTER DOMAIN FIRSTNAME SET NOT NULL;
Voir aussi :

CREATE DOMAIN, DROP DOMAIN.

DROP DOMAIN

Destination

Suppression d’un domaine existant.

Disponible en

DSQL, ESQL.

Syntaxe
DROP DOMAIN domain_name
Table 1. Paramètres de l’opérateur DROP DOMAIN
Paramètre Description

domain_name

Nom de domaine.

L’opérateur DROP DOMAIN supprime un domaine qui existe dans la base de données. Il n’est pas possible de supprimer un domaine qui est référencé par des colonnes de tables de base de données ou s’il a été invoqué dans l’un des modules PSQL. Pour supprimer un tel domaine, vous devez supprimer toutes les colonnes faisant référence au domaine dans les tables et supprimer toutes les références au domaine dans les modules PSQL.

Qui peut supprimer un domaine ?

L’instruction DROP DOMAIN peut être exécutée :

  • Administrators

  • Le propriétaire du domaine ;

  • Les utilisateurs ayant le privilège `DROP ANY DOMAIN'.

Exemples

Suppression d’un domaine

DROP DOMAIN COUNTRYNAME;
Voir aussi :

CREATE DOMAIN, ALTER DOMAIN.