Oracle数据库没有像Mysql那样可以直接设置主键自增,如果要实现自增的话,可以通过序列+触发器来实现。
创建自动增长序列*
tb_seq为序列名
create sequence tb_seq minvalue 1 maxvalue 99999999 -设置最大值和最小值
increment by 1 --设置步长为1
start with 1; --设置初始值为1
创建触发器
tb_auto_incr为触发器的名字
TBL_USER为表名
tb_seq为上面创建序列的名字
USER_ID为TBL_USER表中自增的字段名
create or replace trigger tb_auto_incr
before insert on TBL_USER
for each row
begin
select tb_seq.nextval into :new.USER_ID from dual;
end;
到这里,我们就设置好了一个自增的主键了,这样每次插入的时候就可以实现USER_ID自动+1
但是,多数情况下,我们可能会需要清空该表数据,然后继续新增,这样就会出现一个问题:继续新增的时候,ID是在之前的基础上增加,而并不是从1开始,那么西面就需要解决这个问题。
重置序列
tb_seq为序列的名字
declare
n number(10);
v_startnum number(10):=2;--起始值
v_step number(10):=1;--步长
tsql varchar2(200);
v_seqname varchar2(200):='tb_seq';
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=v_startnum-n-v_step;
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by '||v_step;
execute immediate tsql;
end;
这样,我们就可以实现序列重新自增了。通过查看当前序列,就可以看到效果
查看当前序列
select tfrm_tb_seq.Currval from dual;
欢迎关注本人个人公众号,交流更多技术信息