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了。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐