12C支持先创建一个sequence,然后再将该sequence指定为某个列的值的默认表达式。
和"identity column"具有以下不同点:
·对列的个数没有限制
·sequence必须在列定义之前定义
·如果删除了sequence,会导致后面的insert报错
·表的owner,和使用者对该sequence必须有select权限
·可以手动插入、更新该列(不使用sequence产生的值)
SQL> drop sequence test_seq;
SQL> create sequence test_seq start with ;
SQL> drop table sequence_test_tab;
SQL> create table sequence_test_tab(id number default test_seq.nextval);
SQL> insert into sequence_test_tab values(null);
SQL> insert into sequence_test_tab values(null);
SQL> insert into sequence_test_tab values(default);
SQL> insert into sequence_test_tab values(default);
SQL> insert into sequence_test_tab values();
SQL> commit; --结果显示可以插入null、字面值,而不使用sequence的值。插入default值的时候就使用sequence的值。
SQL> select * from sequence_test_tab; ID
---------- SQL> select count(*) from sequence_test_tab; COUNT(*)
---------- SQL> --插入数据时,如果没有指定该列,也会使用sequence的值来默认插入
alter table sequence_test_tab add (col_2 number);
insert into sequence_test_tab(col_2) values();
SQL> select * from sequence_test_tab; ID COL_2
---------- ---------- rows selected. SQL>