Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Tabelle ändern, um den Standardwert der Spalte zu ändern

Ihr Glaube darüber, was passieren wird, ist nicht richtig. Das Festlegen eines Standardwerts für eine Spalte wirkt sich nicht auf die vorhandenen Daten in der Tabelle aus.

Ich erstelle eine Tabelle mit einer Spalte col2 die keinen Standardwert hat

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

Wenn ich dann die Tabelle ändere, um einen Standardwert festzulegen, ändert sich nichts an den vorhandenen Zeilen

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

Auch wenn ich die Voreinstellung nachträglich wieder ändere, ändert sich nichts an den bestehenden Zeilen

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