Oracle 12C新特性-插入数据时指定NULL值时使用默认值(DEFAULT ON NULL)
Apr272018
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的字段,就会使用默认值。
下面在插入一条N_CODE和N_NUM字段都使用’’的数据。
SQL> insert into t_test01 values (2,'b','',''); 1 row created. SQL> select * from t_test01; ID N_NAME N_CODE N_NUM ---------- -------------------- ---------- ---------- 1 a 20 2 b 20
可以通过实验结果看到,同样传统的默认值字段也没有使用默认值,而DEFAULT ON NULL的字段使用了默认值。
下面在插入一条这两个字段都用DEFAULT值的数据。
SQL> insert into t_test01 values (3,'c',default,default); 1 row created. SQL> select * from t_test01; ID N_NAME N_CODE N_NUM ---------- -------------------- ---------- ---------- 1 a 20 2 b 20 3 c 10 20
因为插入是指定了DEFAULT值,两种默认值字段都使用了默认值。
下面在插入一条插入时不指定这两个字段的数据,这种情况肯定也会使用默认值。
SQL> insert into t_test01(id,n_name) values(4,'d'); 1 row created. SQL> select * from t_test01; ID N_NAME N_CODE N_NUM ---------- -------------------- ---------- ---------- 1 a 20 2 b 20 3 c 10 20 4 d 10 20
这个新功能还是很有用的,可能因为此功能,当业务系统更新活增加需求的时候,就不需要修改程序SQL了。