Oracle
 sql >> Database >  >> RDS >> Oracle

Alter table per modificare il valore predefinito della colonna

La tua convinzione su ciò che accadrà non è corretta. L'impostazione di un valore predefinito per una colonna non influirà sui dati esistenti nella tabella.

Creo una tabella con una colonna col2 che non ha un valore predefinito

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

Se poi modifico la tabella per impostare un valore predefinito, non cambierà nulla delle righe esistenti

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

Anche se successivamente modifico di nuovo l'impostazione predefinita, non ci saranno comunque modifiche alle righe esistenti

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