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 ). |
✔ |
Non autorisé si la colonne et le défaut ont été définis par une commande ALTER TABLE. Pour plus de détails, voir les notes sur l’utilisation ci-dessous. |
|
Modifier la séquence par défaut d’une colonne (à savoir
SET DEFAULT seq_name.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 |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
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). |
||
✔ |
|||
Commentaires |
|||
Définir ou annuler le commentaire d’une colonne.
|
✔ |
||
Politique de masquage |
|||
Définir ou annuler une politique de masquage sur une colonne.
|
✔ |
||
Politique de projection |
|||
Définir ou annuler une politique de projection sur une colonne.
|
✔ |
||
Balisage d’objets |
|||
Définir ou annuler une balise sur une colonne.
|
✔ |
Une colonne peut prendre en charge jusqu’à 20 balises et le nombre maximal de caractères pour une valeur de chaîne de balises est 256. |
- Voir aussi :
ALTER TABLE , CREATE TABLE , DROP TABLE , SHOW TABLES , DESCRIBE TABLE
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> UNSET COMMENT
[ , [ COLUMN ] <col2_name> ... ]
[ , ... ]
[ ) ]
ALTER TABLE <name> { ALTER | MODIFY } [ COLUMN ] dataGovnPolicyTagAction
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
ouMODIFY
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.Les colonnes qui utilisent des types de données semi-structurées (ARRAY, OBJECT et VARIANT) ne peuvent pas être définies sur
NOT NULL
, sauf si la table est vide. La définition de ces colonnes surNOT NULL
lorsque la table contient des lignes n’est pas prise en charge et entraîne une erreur.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à.Si vous modifiez une table pour ajouter une colonne avec une valeur
DEFAULT
alors vous ne pouvez pas supprimer la valeur par défaut de cette colonne. Par exemple, dans la séquence d’instructions suivante, la dernière instructionALTER TABLE ... ALTER COLUMN
provoque une erreur :CREATE TABLE t(x INT); INSERT INTO t VALUES (1), (2), (3); ALTER TABLE t ADD COLUMN y INT DEFAULT 100; INSERT INTO t(x) VALUES (4), (5), (6); ALTER TABLE t ALTER COLUMN y DROP DEFAULT;
Cette restriction permet d’éviter toute incohérence entre les valeurs des lignes insérées avant l’ajout de la colonne et celles des lignes insérées après l’ajout de la colonne. Si la valeur par défaut était détruite, la colonne contiendrait alors :
Une valeur NULL pour les lignes insérées avant l’ajout de la colonne.
La valeur par défaut des lignes insérée après l’ajout de la colonne.
Il est également interdit de supprimer la valeur de colonne par défaut de n’importe quel clone de la table.
Lorsque vous réglez
TYPE
pour une colonne, le type spécifié (c’est-à-diretype
) 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 nombre spécifiée.
Diminuer la précision de la colonne de nombre 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 pouvez pas restaurer la table sans d’abord augmenter la précision.
Pour les politiques de masquage :
La clause
USING
et le mot-cléFORCE
sont tous deux facultatifs ; ils ne sont pas nécessaires pour définir une politique de masquage sur une colonne. La clauseUSING
et le mot-cléFORCE
peuvent être utilisés séparément ou ensemble. Pour plus de détails, voir :Une seule politique de masquage qui utilise des colonnes conditionnelles peut être appliquée à plusieurs tables, à condition que la structure des colonnes de la table corresponde aux colonnes spécifiées dans la politique.
Lorsque vous modifiez une ou plusieurs colonnes de la table avec une politique de masquage ou la table elle-même avec une politique d’accès aux lignes, utilisez la fonction POLICY_CONTEXT pour simuler une requête sur la ou les colonnes protégées par une politique de masquage et la table protégée par une politique d’accès aux lignes.
Concernant les métadonnées (par exemple, le champ
COMMENT
) :Attention
Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.
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 colonnec3
.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 à simplementTYPE
.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 :
-- single column ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id , COLUMN empl_dob SET MASKING POLICY mask_empl_dob ;
Annulez une politique de masquage de sécurité au niveau des colonnes depuis une colonne de table :
-- single column ALTER TABLE empl_info modify column empl_id unset masking policy; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id UNSET MASKING POLICY , COLUMN empl_dob UNSET MASKING POLICY ;