web-dev-qa-db-fra.com

Modifier le tableau pour modifier la valeur par défaut de la colonne

J'ai une exigence selon laquelle nous devons modifier la valeur par défaut d'une colonne dans la table de base de données. La table est déjà une table existante dans la base de données et la valeur par défaut de la colonne est actuellement NULL. Maintenant, si vous ajoutez une nouvelle valeur par défaut à cette colonne, Si je suis correct, toutes les valeurs NULL existantes de la colonne sont mises à jour avec la nouvelle valeur DEfault. Y a-t-il un moyen de ne pas le faire, mais de définir une nouvelle valeur par défaut pour la colonne. Je veux dire que je ne veux pas que les NULL existants soient mis à jour et qu'ils restent en tant que NULL.

Toute aide à ce sujet est appréciée. Merci

26
ravi

Votre croyance sur ce qui va arriver n'est pas correcte. La définition d'une valeur par défaut pour une colonne n'affectera pas les données existantes dans la table.

Je crée une table avec une colonne col2 qui n'a pas de valeur par défaut

SQL> create table foo(
  2    col1 number primary key,
  3    col2 varchar2(10)
  4  );

Table created.

SQL> insert into foo( col1 ) values (1);

1 row created.

SQL> insert into foo( col1 ) values (2);

1 row created.

SQL> insert into foo( col1 ) values (3);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3

Si je modifie ensuite la table pour définir une valeur par défaut, rien sur les lignes existantes ne changera

SQL> alter table foo
  2    modify( col2 varchar2(10) default 'foo' );

Table altered.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3

SQL> insert into foo( col1 ) values (4);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo

Même si par la suite je modifie à nouveau la valeur par défaut, les lignes existantes ne seront pas modifiées.

SQL> alter table foo
  2    modify( col2 varchar2(10) default 'bar' );

Table altered.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo

SQL> insert into foo( col1 ) values (5);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo
         5 bar
55
Justin Cave
ALTER TABLE {TABLE NAME}
ALTER COLUMN {COLUMN NAME} SET DEFAULT '{DEFAULT VALUES}'

exemple :

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'
1
Pankaj Kumar

Suivant l'exemple de Justin, la commande ci-dessous fonctionne dans Postgres:

alter table foo alter column col2 set default 'bar';

1
amit