需要先创建序列,然后nextval添加数据使其自动生成序号。
1、创建表:
create table test(id int,
name varchar2(20));
2、创建序列:
Create sequence seq_test_idIncrement by 1
Start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache;
3、插入数据:
insert into test values (seq_test_idnextval,'badkano');4、再插入一条数据:
insert into test values (seq_test_idnextval,'百度知道团长');这样可见,序号是添加成功的。
1、使用序列+触发器
即新建一个序列,再在表上面创建一个触发器,当新增表数据时,触发器默认给PK从序列中获取值进行赋值
2、查询MAX+1
即在insert时,先将PK的最大值查询出来,在上面+1,为新的PK,也是可以的
其实Oracle是没有SQL Server 的自增长的列的概念。
我通过这种方式就是为了尽可能模拟。
seq_a 是序列号
insert into t_a (id, value) values(seq_anextval,'test'); 这就是Oracle的经典(后者通常)的使用方法。
id当然就是你所谓的自增长列(再次强调,Oracle没有这个概念)
只有通过触发器+sequence,能够实现你所谓自增长列。
1、首先要保证该数据库用户有删除序列和新建序列的权限,存储过程中这个权限要显示赋权:
grant
create
sequence
to
数据库用户;
grant
drop
any
sequence
to
数据库用户;
2、存储过程中创建序列和删除序列:
创建序列:
execute
immediate
'create
sequence
序列名'
||
chr(10)
||
'minvalue
1'
||
chr(10)
||
'maxvalue
999999999999999999999999999'
||
chr(10)
||
'start
with
1'
||
chr(10)
||
'increment
by
1'
||
chr(10)
||
'cache
20';
删除序列:
execute
immediate
'drop
sequence
序列名';
oracle的自增需要依靠序列和触发器共同实现
比如
先创建一个表
create table test(id int primary key,
name varchar2(10));创建一个序列
create sequence test_seq
increment by 1
start with 1
minvalue 1
maxvalue 9999999999999
nocache
order;触发器实现
create or replace trigger test_trigger
before insert on testfor each row
begin
select test_seqNextval into:newid from dual;
end;然后你试试吧
insert into test (name) values ('张三');
使用比较灵活,就是一个计数器,被查询一次nextval就自加(可以正数或者负数),并且可以被cache到内存中,防止热点问题。
缺点是需要人工干预,不想sqlserver那样有一个数据库系统内部维护的自加列。
以上就是关于oracle 数据库 数据表自动生成序号 怎么添加全部的内容,包括:oracle 数据库 数据表自动生成序号 怎么添加、oracle数据库达到数据库的序列化有几种方式因为我看到的数据库没有看见有序列并且可以达到序列的效果、oracle数据库怎么建sequences作为自增长序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)