FirebirdSQL logo
 DOMAININDEX 

Privilèges d’exécution

La clause optionnelle SQL SECURITY dans la spécification de la table permet de spécifier avec quels privilèges les colonnes calculées sont calculées.Si l’option INVOKER est sélectionnée, les colonnes calculées le sont avec les privilèges de l’utilisateur appelant.Si l’option DEFINER est sélectionnée, les colonnes calculées sont calculées avec les privilèges de l’utilisateur définissant (propriétaire). Par défaut, les colonnes calculées sont calculées avec les privilèges de l’utilisateur appelant.En outre, les triggers héritent des privilèges d’exécution des tables, s’ils ne sont pas surchargés dans les triggers eux-mêmes.

Tip

Les privilèges d’exécution par défaut pour les objets de métadonnées nouvellement créés peuvent être modifiés à l’aide de la commande

ALTER DATABASE SET DEFAULT SQL SECURITY {DEFINER | INVOKER}

ALTER TABLE

Objectif

Modifie la structure de la table.

Disponible en

DSQL, ESQL.

Syntaxe
ALTER TABLE tablename
  <operation> [, <operation>];

<operation> ::=
    ADD <col_def>
  | ADD <tconstraint>
  | DROP colname
  | DROP CONSTRAINT constr_name
  | DROP SQL SECURITY
  | ALTER [COLUMN] colname <col_mod>
  | ALTER SQL SECURITY {DEFINER | INVOKER}
  | {ENABLE | DISABLE} PUBLICATION

<col_def> ::=
    <regular_col_def>
  | <computed_col_def>
  | <identity_col_def>

<regular_col_def> ::=
  colname { <datatype> | domainname }
  [DEFAULT {literal | NULL | <context_var>}]
  [NOT NULL]
  [<col_constraint>]
  [COLLATE collation_name]


<computed_col_def>  ::=
  colname [<datatype>]
  {COMPUTED [BY] | GENERATED ALWAYS AS} (<expression>)

<identity_col_def> ::=
  colname [<datatype>] {ALWAYS | GENERATED BY} DEFAULT AS IDENTITY
  [(START WITH startvalue)] [<col_constraint>]

<col_mod> ::=
     TO newname
  |  POSITION newpos
  | <regular_col_mod>
  | <computed_col_mod>
  | <identity_col_mod>

<regular_col_mod> ::=
  |  TYPE { <datatype>  | domain_name }
  |  SET DEFAULT {literal | NULL | <context_var>}
  |  DROP DEFAULT
  |  SET NOT NULL
  |  DROP NOT NULL

<computed_col_mod> ::=
  [TYPE <datatype>] {GENERATED ALWAYS AS | COMPUTED [BY]} (<expression>)

<identity_col_mod> ::=
     <alter identity column option> ...
  |  SET GENERATED { ALWAYS | BY DEFAULT } [<alter identity column option> ...]
  |  DROP INDENITY

<alter identity column option> ::=
     RESTART [ WITH startvalue ]
  |  SET INCREMENT [BY] incrementvalue

<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.

<col_constraint> ::=
  [CONSTRAINT constr_name]
  {   UNIQUE [<using_index>]
    | PRIMARY KEY [<using_index>]
    | REFERENCES other_table [(other_col)]
        [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
        [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
        [<using_index>]
    | CHECK (<check_condition>)
  }

<tconstraint> ::=
  [CONSTRAINT constr_name]
  {   UNIQUE (<col_list>) [<using_index>]
    | PRIMARY KEY (<col_list>) [<using_index>]
    | FOREIGN KEY (<col_list>)
      REFERENCES other_table [(<col_list>)]
        [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
        [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
        [<using_index>]
    | CHECK (<check_condition>)
  }

<col_list> ::= colname [, colname ...]

<using_index> ::= USING [ASC[ENDING] | DESC[ENDING]] INDEX indexname

<check_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>)
  | (<check_condition>)
  | NOT <check_condition>
  | <check_condition> OR <check_condition>
  | <check_condition> AND <check_condition>


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

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


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

tablename

Nom de la table.

operation

Une des opérations autorisées pour modifier la structure d’une table.

colname

Nom de la colonne de la table, peut contenir jusqu’à 63 caractères.Doit être unique au sein de la table.

newname

Nouveau nom de colonne de la table, peut avoir jusqu’à 63 caractères.Doit être unique au sein de la table.

gencolname

Le nom de la colonne de la table à calculer.

idencolname

Nom de la colonne d’identité.

newpos

Nouvelle position de la colonne dans le tableau.Un nombre entier compris entre 1 et le nombre de colonnes du tableau.

datatype

Type de données SQL.

domain_name

Nom de domaine.

startvalue

La valeur initiale de la colonne d’identité.

incrementvalue

La valeur incrémentale pour la colonne d’identité.Doit être différent de 0.

col_constraint

Restriction de la colonne.

tconstraint

Contrainte de la table.

constr_name

Nom de la contrainte, peut contenir jusqu’à 63 caractères.

other_table

Le nom de la table à laquelle la clé étrangère fait référence.

other_col

La colonne de la table à laquelle la clé étrangère fait référence.

using_index

Vous permet de définir le nom de l’index généré automatiquement pour la contrainte, et éventuellement de définir si l’index sera en ordre croissant (par défaut) ou décroissant.

literal

Litéral.

context_var

Toute variable contextuelle dont le type est compatible avec le type de données de la colonne.

check_condition

Condition de contrôle des contraintes.Exécuté si évalué comme TRUE ou NULL/UNKNOWN.

collation_name

Le nom de l’ordre de tri.Doit être spécifié si vous voulez que l’ordre de tri d’une colonne soit différent de l’ordre de tri par défaut pour le jeu de caractères de cette colonne.

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.

experssion

Expression.

genname

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

func

Fonction scalaire.

L’instruction ALTER TABLE modifie la structure d’une table existante.Une seule instruction ALTER TABLE permet de multiples opérations d’ajout/suppression de colonnes et de contraintes, ainsi que des modifications de colonnes.La liste des opérations effectuées lors de la modification d’une table est séparée par une virgule.

Compteur de format

Certaines modifications apportées à la structure des tables augmenteront le compteur de format attribué à chaque table.Le nombre de formats pour chaque table est limité à 255.Lorsque le compteur de format atteint cette valeur, vous ne pouvez plus modifier la structure de la table.

Remise à zéro du compteur de format
Pour réinitialiser le compteur de format, la base de données doit être sauvegardée et restaurée (avec l’utilitaire gbak).

la commande ADD

La phrase ADD vous permet d’ajouter une nouvelle colonne ou une nouvelle contrainte de table.La syntaxe de définition d’une colonne et la syntaxe de description d’une contrainte de table sont exactement les mêmes que la syntaxe décrite dans le document CREATE TABLE.

impact sur le compteur de format :
  • Chaque fois qu’une nouvelle colonne est ajoutée, le numéro du format est incrémenté de un.

  • L’ajout d’une nouvelle contrainte de table n’entraîne pas l’augmentation du numéro de format.

Example 1. Ajout d’une colonne à une table
ALTER TABLE COUNTRY
ADD CAPITAL VARCHAR(25);
Example 2. Ajout d’une colonne avec la restriction `NOT NULL'.
ALTER TABLE OBJECTS
ADD QUANTITY INT DEFAULT 1 NOT NULL;
Important

Notez la clause DEFAULT, qui est obligatoire pour ajouter une contrainte NOT NULL s’il y a des données dans la table.Le fait est que dans ce cas, il y a également un contrôle de validité des données.Et comme lorsqu’une nouvelle colonne est ajoutée, elle contient NULL pour toutes les lignes de la table, une exception sera générée.

Example 3. Ajout d’une colonne avec une restriction d’unicité et suppression d’une autre colonne
ALTER TABLE COUNTRY
  ADD CAPITAL VARCHAR(25) UNIQUE,
  DROP CURRENCY;

Pour ajouter des contraintes au niveau de la table, utilisez la phrase ADD [CONSTRAINT].

Ajout d’une contrainte de contrôle et d’une clé étrangère

ALTER TABLE JOB
ADD CONSTRAINT CHK_SALARY CHECK (MIN_SALARY < MAX_SALARY),
ADD FOREIGN KEY (JOB_COUNTRY)
REFERENCES COUNTRY (COUNTRY);
Warning

Attention, lorsqu’on ajoute une nouvelle contrainte CHECK, il n’y a pas de vérification que les données précédemment saisies correspondent à celle-ci.Nous vous recommandons donc de vérifier les données de la table avant d’ajouter une telle contrainte.