Oracle
 sql >> Base de données >  >> RDS >> Oracle

Modifier la table pour modifier la valeur par défaut de la colonne

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

Je crée un tableau 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 le tableau 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 je modifie à nouveau la valeur par défaut par la suite, il n'y aura toujours aucun changement dans les lignes existantes

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