Catégories :

Table, vue et séquence DDL

ALTER TABLE … ALTER COLUMN

Ce chapitre décrit comment modifier les propriétés de une ou plusieurs colonnes d’une table en utilisant la clause ALTER COLUMN dans une instruction ALTER TABLE.

Le tableau suivant décrit les actions prises en charge/non prises en charge lors de la modification des propriétés de colonne :

Action

Pris en charge

Aucune prise en charge

Remarques

Valeurs par défaut

Détruire la valeur par défaut d’une colonne (c.-à-d. DROP DEFAULT).

Modifiez la séquence par défaut d’une colonne, à savoir SET DEFAULT nom_seq.NEXTVAL.

Utiliser uniquement pour les colonnes qui ont déjà une séquence.

Modifier la valeur par défaut d’une colonne, sauf si la valeur par défaut est une séquence.

Ajouter une valeur par défaut pour une colonne.

Nullabilité

Modifier la possibilité de valeur NULL d’une colonne (c.-à-d. SET NOT NULL ou DROP NOT NULL).

Types de données

Modifier le type de données d’une colonne en un type synonyme (par exemple, STRING en VARCHAR).

Modifier le type de données d’une colonne en un type différent (par exemple, STRING en NUMBER).

Augmenter la longueur d’une colonne texte/chaîne (par exemple, de VARCHAR(50) à VARCHAR(100)).

Raccourcir la longueur d’une colonne texte/chaîne (par exemple, de VARCHAR(50) à VARCHAR(25)).

Augmenter la précision d’une number column (par exemple, NUMBER(10,2) à NUMBER(20,2)).

Diminuer la précision d’une number column (par exemple, NUMBER(20,2) à NUMBER(10,2)).

Autorisé uniquement si la nouvelle précision est suffisante pour contenir toutes les valeurs actuellement comprises dans la colonne. De plus, une diminution de la précision peut avoir un impact sur Time Travel (voir les notes sur l’utilisation pour plus de détails).

Modifiez l’échelle d’une number column (par exemple, NUMBER(10,2) en NUMBER(10,4)).

Commentaires

Ajoutez ou écrasez le commentaire d’une colonne.

Politique de masquage

Définissez ou annulez une politique de masquage Sécurité au niveau des colonnes sur une colonne.

Une seule colonne par instruction ALTER. Exécutez une seule instruction ALTER sur une colonne pour définir ou annuler une politique de masquage de sécurité au niveau de la colonne.

Dans ce chapitre :

Syntaxe

ALTER TABLE <name> { ALTER | MODIFY } [ ( ]
                                              [ COLUMN ] <col1_name> DROP DEFAULT
                                            , [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL
                                            , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL }
                                            , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type>
                                            , [ COLUMN ] <col1_name> COMMENT '<string>'
                                            , COLUMN <col1_name> SET MASKING POLICY <policy_name>
                                          [ , [ COLUMN ] <col2_name> ... ]
                                          [ , ... ]
                                      [ ) ]

Notes sur l’utilisation

  • Une seule instruction ALTER TABLE peut être utilisée pour modifier plusieurs colonnes d’une table. Chaque modification est spécifiée comme une clause composée de la colonne et de la propriété de la colonne à modifier, séparées par des virgules :

    • Utiliser le mot clé ALTER ou MODIFY pour lancer la liste des clauses (c’est-à-dire, les colonnes/propriétés à modifier) dans l’instruction.

    • Des parenthèses peuvent être utilisées pour regrouper les clauses, mais ne sont pas obligatoires.

    • Le mot clé COLUMN peut être spécifié dans chaque clause, mais n’est pas obligatoire.

    • Les clauses peuvent être spécifiées dans n’importe quel ordre.

  • Lorsque vous définissez une colonne sur NOT NULL, si la colonne contient des valeurs NULL, une erreur est renvoyée, et aucun changement n’est appliqué à la colonne.

  • Pour modifier la séquence par défaut d’une colonne, celle-ci doit déjà avoir une séquence par défaut. Vous ne pouvez pas utiliser la commande ALTER TABLE ... SET DEFAULT <nom_seq> pour ajouter une séquence à une colonne qui n’en contient pas déjà.

  • Lorsque vous réglez TYPE pour une colonne, le type spécifié (c’est-à-dire, type) doit être NUMBER ou un type de données texte (VARCHAR, STRING, TEXT, etc.).

    • Pour le type de données NUMBER, TYPE peut être utilisé pour :

      • Augmenter la précision de la colonne de texte spécifiée.

      • Diminuer la précision de la colonne de texte spécifiée si la nouvelle précision est suffisante pour contenir toutes les valeurs de données actuellement comprises dans la colonne.

    • Pour les types de données texte, TYPE ne peut être utilisé que pour augmenter la longueur de la colonne.

  • Si la précision d’une colonne est inférieure à la précision maximale de toutes les données de colonne conservées dans Time Travel, vous ne pourrez pas restaurer la table sans d’abord augmenter la précision.

  • Une seule colonne par instruction ALTER. Exécutez une seule instruction ALTER sur une colonne pour définir ou annuler une politique de masquage de sécurité au niveau de la colonne.

Exemples

Exemple de configuration :

CREATE OR REPLACE TABLE t1 (
   c1 NUMBER NOT NULL,
   c2 NUMBER DEFAULT 3,
   c3 NUMBER DEFAULT seq1.nextval,
   c4 VARCHAR(20) DEFAULT 'abcde',
   c5 STRING);

DESC TABLE t1;

+------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+
| name | type              | kind   | null? | default                 | primary key | unique key | check | expression | comment |
|------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------|
| C1   | NUMBER(38,0)      | COLUMN | N     | NULL                    | N           | N          | NULL  | NULL       | NULL    |
| C2   | NUMBER(38,0)      | COLUMN | Y     | 3                       | N           | N          | NULL  | NULL       | NULL    |
| C3   | NUMBER(38,0)      | COLUMN | Y     | DB1.PUBLIC.SEQ1.NEXTVAL | N           | N          | NULL  | NULL       | NULL    |
| C4   | VARCHAR(20)       | COLUMN | Y     | 'abcde'                 | N           | N          | NULL  | NULL       | NULL    |
| C5   | VARCHAR(16777216) | COLUMN | Y     | NULL                    | N           | N          | NULL  | NULL       | NULL    |
+------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+

Apporter les modifications suivantes à t1 :

  • Modifiez la colonne NOT NULL c1 en NULL.

  • Détruisez la valeur par défaut de la colonne c2 et modifiez la séquence par défaut de la colonne c3.

  • Augmentez la longueur de la colonne c4 et détruisez la valeur par défaut de la colonne.

  • Ajoutez un commentaire pour la colonne c5.

ALTER TABLE t1 ALTER COLUMN c1 DROP NOT NULL;

ALTER TABLE t1 MODIFY c2 DROP DEFAULT, c3 SET DEFAULT seq5.nextval ;

ALTER TABLE t1 ALTER c4 SET DATA TYPE VARCHAR(50), COLUMN c4 DROP DEFAULT;

ALTER TABLE t1 ALTER c5 COMMENT '50 character column';

DESC TABLE t1;

+------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+
| name | type              | kind   | null? | default                 | primary key | unique key | check | expression | comment             |
|------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------|
| C1   | NUMBER(38,0)      | COLUMN | Y     | NULL                    | N           | N          | NULL  | NULL       | NULL                |
| C2   | NUMBER(38,0)      | COLUMN | Y     | NULL                    | N           | N          | NULL  | NULL       | NULL                |
| C3   | NUMBER(38,0)      | COLUMN | Y     | DB1.PUBLIC.SEQ5.NEXTVAL | N           | N          | NULL  | NULL       | NULL                |
| C4   | VARCHAR(50)       | COLUMN | Y     | NULL                    | N           | N          | NULL  | NULL       | NULL                |
| C5   | VARCHAR(16777216) | COLUMN | Y     | NULL                    | N           | N          | NULL  | NULL       | 50 character column |
+------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+

Identique à l’exemple précédent, mais avec les modifications suivantes pour illustrer la polyvalence/flexibilité de la commande :

  • Toutes les actions exécutées dans une seule clause ALTER COLUMN.

  • L’ordre des colonnes de la clause est différent.

  • SET DATA TYPE raccourci à simplement TYPE.

ALTER TABLE t1 ALTER (
   c1 DROP NOT NULL,
   c5 COMMENT '50 character column',
   c4 TYPE VARCHAR(50),
   c2 DROP DEFAULT,
   COLUMN c4 DROP DEFAULT,
   COLUMN c3 SET DEFAULT seq5.nextval
  );

Cet exemple produit les mêmes résultats.

Appliquez une politique de masquage de sécurité au niveau des colonnes à une colonne de table :

ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id;

Annulez une politique de masquage de sécurité au niveau des colonnes depuis une colonne de table :

ALTER TABLE empl_info modify column empl_id unset masking policy;