Oracle通过序列实现主键自增长

序列化+触发器

一般选这种

只要建立好序列化+触发器,触发器会在我们插入数据时自动触发,帮助我们进行+1操作。

创建序列sequence,指定

//准备工作创建一张表
create table dept_p(
    dept_id   VARCHAR2(40) not null,
    dept_name VARCHAR2(40),
    parent_id VARCHAR2(40),
    state     NUMBER(11),
    dept_sort NUMBER(11)
);
alter table DEPT_P add [constraint dept_id] primary key(dept_id);

创建序列

create sequence seq_t_dept
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 50

建立触发器

create or replace trigger "dept_trig"
    before insert on dept_p
    referencing old as old new as new for each row
declare
begin
    select seq_t_dept.nextval into :new.dept_sort from dual;
end dept_trig;

此时报错:ORA-04089:无法对SYS拥有额对象创建触发器

那么只能再建一个公用账户,并赋予connect和resource角色来创建触发器

create user c##lyc identified by root;
grant connect, resource to c##lyc;

然后使用新建的用户登陆执行该指令

序列化+显式调用序列化

-- 创建sequence
create sequence seq_on_dept
increment by 1
start with 1
nomaxvalue
nocycle
nocache;

显式调用序列

insert into dept_p values('001', '安保部', '000', 1, seq_on_dept.nextval);
posted @ 2021-04-08 16:23  YC-L  阅读(7)  评论(0编辑  收藏