Oracle列自增实现(3)-DEFAULT Values Using Sequences

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

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

创建序列

CREATE SEQUENCE t1_seq;

建表

CREATE TABLE t1 (
id NUMBER DEFAULT t1_seq.NEXTVAL,
description VARCHAR2(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;

二、默认值明确为非空

创建两个序列

CREATE SEQUENCE default_seq;
CREATE SEQUENCE default_on_null_seq;

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

CREATE TABLE t2 (
col1 NUMBER DEFAULT default_seq.NEXTVAL,
col2 NUMBER DEFAULT ON NULL default_on_null_seq.NEXTVAL,
description VARCHAR2(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;

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

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;

SELECT * FROM detail;

原文:

DEFAULT Values for Table Columns : Enhancements in Oracle Database 12c Release 1 (12.1)

时间: 2024-09-28 16:12:45

Oracle列自增实现(3)-DEFAULT Values Using Sequences的相关文章

Oracle列自增实现(2)-Identity Columns in Oracle Database 12c Release 1 (12.1)

Oracle列自增-Identity Columns in Oracle Database 12c Release 1 (12.1) 在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序列+触发器实现,到了12C ORACLE 引进了Identity Columns新特性,从而实现了列自增长功能. 一.Identity Columns使用语法 GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity

oracle列自增实现

1.Sequence+Trigger实现Oracle列自增CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];创建测试表[email protected]CDB> CREATE TABLE TEST(2 ID NUMBER (10) NOT NULL,3 DESCRIPTION VARCHAR2 (50) NO

oracle 设置标识列自增

设置reg_user表 userid为自增列 1.设置键 2.创建序列 3.创建触发器 oracle 设置标识列自增

Oracle ID 自增

实现Oracle Id自增 1.方法一 create table app_student( id integer generated by default as identity not null primary key, createtime DATE not NULL); insert into app_student(createtime) values(sysdate); 2. 方法二 创建序列 创建表 CREATE TABLE APP_USER( ID number(20) NOT N

基本sql语句--列的增删改

列的增删改   列声明包括:列名称,列属性,[列类型],[默认值]. 增加列:add alter table 表名 add 列声明. 如:alter table boy add height tinyint unsigned not null default 0; 增加的列,默认在表的最后一列. 可以用after声明新增列在那一列后面:alter table 表名 add 列声明 after 已存在列名. 如:alter table boy add age tinyint unsigned no

19_列的增删改

表的管理之列的增删改 1.增 alter table 表名 add 列声明; 默认这个新增的列在表的最后一列. 如果不想要新增的列在表的最后一列,那么可以: alter table 表名 add 列声明 after 列名; alter table 表名 add 列声明 first; 2.删 alter table 表名 drop 列名; 3.改 alter table 表名 change 被改变的列名 列声明; ---------------------- 1.默认在表的最后一行增加一列身高sg

oracle 实现 自增主键功能

转自:https://blog.csdn.net/zxh2075/article/details/78488141 之前有一项工作是将mysql的数据库实现转移到oracle,遇到了自增主键实现的问题. 首先介绍一下MySQL和Oracle的背景知识 1)MySQL建表时必须有一个主键(PRIMARY KEY), 每条主键内容必须唯一(Unique), 所以经常使用一个”ID”字段作为主键,给它一个”auto_increment”属性,让”ID”字段每条记录都自增”1″. 比如下表: 1 CRE

ORACLE列值合併

合併列值最通用的方法就是寫一個自定義函數去實現,這裏介紹的是其他方法. 在SQL Server中合併列值可以使用For Xml Path,在Oracle中則可以使用wm_concat 或 ListAgg. 準備數據: CREATE TABLE MyTest(xType NUMBER,City nvarchar2(200)); / INSERT INTO MyTest(xType,City) SELECT 1,N'北京' FROM dual UNION ALL SELECT 1,N'上海' FRO

oracle实现自增id

--oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null primary key, xsName nvarchar2(120) not null, xsAge integer not null, Mobile varchar(12), Email varchar(50), Address nvarchar2(300) ); --创建一个序列,序列名字叫SEQ_Studen