Prior to 12c, the DEFAULT for a column would not be applied if you explicitly (or implicitly) inserted a NULL into that column. The NULL would override the DEFAULT value -- the DEFAULT would not get applied.
Thus in 11.2.0.3 :
However, 12c has introduced a DEFAULT ON NULL clause.
Thus :
Thus, the "on null" specification applied in the case of the first row.
.
.
.
Thus in 11.2.0.3 :
SQL> create table test_null_default (id_column number, data_column varchar2(10) default 'SPACE');
Table created.
SQL> insert into test_null_default values (1,NULL);
1 row created.
SQL> select id_column, decode(data_column,NULL,'A Null',data_column) from test_null_default;
ID_COLUMN DECODE(DAT
---------- ----------
1 A Null
1 row selected.
SQL> insert into test_null_default(id_column) values (2);
1 row created.
SQL> select id_column, decode(data_column,NULL,'A Null',data_column) from test_null_default;
ID_COLUMN DECODE(DAT
---------- ----------
1 A Null
2 SPACE
2 rows selected.
SQL>
However, 12c has introduced a DEFAULT ON NULL clause.
Thus :
SQL*Plus: Release 12.1.0.1.0 Production on Wed Dec 11 22:19:53 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: hemant/hemant
Last Successful login time: Wed Dec 11 2013 22:19:41 +08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> create table test_null_default
2 (id_column number, data_column varchar2(10) default on null 'SPACE');
Table created.
SQL>
SQL> insert into test_null_default values (1, NULL);
1 row created.
SQL> select * from test_null_default;
ID_COLUMN DATA_COLUM
---------- ----------
1 SPACE
SQL>
SQL> insert into test_null_default (id_column) values (2);
1 row created.
SQL> select * from test_null_default;
ID_COLUMN DATA_COLUM
---------- ----------
1 SPACE
2 SPACE
SQL>
Thus, the "on null" specification applied in the case of the first row.
.
.
.