Advertisement

oracle字段默认自增,Oracle列自增实现(3)-DEFAULT Values Using Sequences

阅读量:

Oracle 12c中,可以使用序列的NEXTVAL and CURRVAL的值作为默认值,来实现列自增!

一、使用序列的NEXTVAL and CURRVAL的值作为默认值

创建序列

CREATE SEQUENCE t1_seq;

建表

CREATE TABLEt1 (

idNUMBER DEFAULTt1_seq.NEXTVAL,

descriptionVARCHAR2(30)

);

插入数据

INSERT INTO t1 (description) VALUES ('DESCRIPTION only');INSERT INTO t1 (id, description) VALUES (999, 'ID=999 and DESCRIPTION');INSERT INTO t1 (id, description) VALUES (NULL, 'ID=NULL and DESCRIPTION');

查询结果

SELECT * FROM t1;
cfa84efd9cf488bd66ac01d9ba05ec49.png

二、默认值明确为非空

创建两个序列

CREATESEQUENCE default_seq;CREATE SEQUENCE default_on_null_seq;

建表,col1和col2分别使用上面两个序列的NEXTVAL作为默认值,其中col2 DEFAULT ON NULL

CREATE TABLEt2 (

col1NUMBER DEFAULTdefault_seq.NEXTVAL,

col2NUMBER DEFAULT ON NULLdefault_on_null_seq.NEXTVAL,

descriptionVARCHAR2(30)

);

插入数据

INSERT INTO t2 (description) VALUES ('DESCRIPTION only');INSERT INTO t2 (col1, col2, description) VALUES (999, 999, '999,999,DESCRIPTION');INSERT INTO t2 (col1, col2, description) VALUES (NULL, NULL, 'NULL,NULL,DESCRIPTION');

查询数据,可以看到col2位NULL时候,被默认转换使用了default_on_null_seq.NEXTVAL的

SELECT * FROM t2;
07d8471b3ec4a6e4bf06022b8f19c33c.png

三、例子:主从表的简单例子

CREATE SEQUENCE master_seq;

CREATE SEQUENCE detail_seq;

CREATE TABLE master (

id NUMBER DEFAULT master_seq.NEXTVAL,

description VARCHAR2(30)

);

CREATE TABLE detail (

id NUMBER DEFAULT detail_seq.NEXTVAL,

master_id NUMBER DEFAULT master_seq.CURRVAL,

description VARCHAR2(30)

);

INSERT INTO master (description) VALUES ('Master 1');

INSERT INTO detail (description) VALUES ('Detail 1');

INSERT INTO detail (description) VALUES ('Detail 2');

INSERT INTO master (description) VALUES ('Master 2');

INSERT INTO detail (description) VALUES ('Detail 3');

INSERT INTO detail (description) VALUES ('Detail 4');

SELECT * FROM master;
81a2fad5b8bf1c67822ee5344d8634bb.png

SELECT * FROM detail;
58e426b95e71cf0656dd3727d9748a40.png

原文:

全部评论 (0)

还没有任何评论哟~