Oracle 12支持在向有默认值的字段中插入数据时,如果指定NULL或’’时使用默认值,这个新特性被称为DEFAUT ON NULL。在12C版本之前,是没有这个功能的,12C版本之前,对于这样的列,插入时指定NULL,就不会使用默认值,当然12C也是兼容的,也可以插入NULL时不是有默认值。
下面进行测试,首先创建测试表。
SQL> create table t_test01(id number,n_name varchar2(20),n_code number default 10,n_num number default on null 20);
Table created.
上面建的表,N_CODE字段是传统的使用默认值的字段,和12C之前版本一样,插入时使用NULL不会使用默认值,N_NUM字段就是本文要测试的12C的新特性,插入数据时明确指定NULL时,使用默认值。
下面向测试表中插入一条数据,N_CODE和N_NUM字段都使用NULL值。
SQL> insert into t_test01 values (1,'a',null,null);
1 row created.
SQL> select * from t_test01;
ID N_NAME N_CODE N_NUM
---------- -------------------- ---------- ----------
1 a 20
可以看到,传统的有默认值的字段,在插入数据时,如果使用NULL值,不会使用默认值,而DEFAULT ON NULL的字段,就会使用