--如何实现主键字段自增
--第一步
--创建序列T_PLAN_NEW_NEXTVAL
create sequence T_PLAN_NEW_ID
increment by 1 --每次加几个
start with 100 --从100开始计数
minvalue 1 --设置最小值
maxvalue 999999999; --设置最大值
create sequence "序列号名称"
increment by 1 --每次加几个
start with 100 --从100开始计数
minvalue 1 --设置最小值
maxvalue 999999999; --设置最大值
--第二步骤
----创建触发器
--以T_PLAN_NEW表为demo
create or replace trigger T_PLAN_NEW_ID_nextval
before insert on T_PLAN_NEW
referencing old as old new as new
for each row
begin
select T_PLAN_NEW_ID.nextval into :new.id from dual;
end;
create or replace trigger "触发器名字自起"
before insert on "表名字"
referencing old as old new as new for each row
begin
select "序列名".nextval into :new.id from dual;
end;
CREATE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW
WHEN ( new.id IS NULL ) BEGIN SELECT
emp_sequence.nextval INTO : new.id
FROM
dual;
END;
=====================下面是笔记
--获取序列自增ID --
select seq_sys_dict_type.nextval from dual --刷新自增时间
select T_PLAN_NEW_NEXTVAL from dual;
select * from dba_sequences where sequence_owner='LGGBWL' and SEQUENCE_NAME = 'T_PLAN_NEW_ID';
-- 删除序列 --
drop sequence T_PLAN_NEW_ID;
-- 创建序列 t_plan_new.nextval --
--方法一
--创建序列T_PLAN_NEW_NEXTVAL
create sequence T_PLAN_NEW_ID
increment by 1
start with 7
minvalue 1
maxvalue 999999999;
----创建触发器
create or replace trigger T_PLAN_NEW_ID_nextval
before insert on T_PLAN_NEW
referencing old as old new as new
for each row
begin
select T_PLAN_NEW_ID.nextval into :new.id from dual;
end;
create or replace trigger "触发器名字自起"
before insert on "表名字"
referencing old as old new as new for each row
begin
select "序列名".nextval into :new.id from dual;
end;
CREATE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW
WHEN ( new.id IS NULL ) BEGIN SELECT
emp_sequence.nextval INTO : new.id
FROM
dual;
END;
--方法二
create sequence T_PLAN_NEW_NEXTVAL
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;
-- 更改序列 T_PLAN_NEW_NEXTVAL--
alter sequence T_PLAN_NEW_NEXTVAL
increment by 1
minvalue 7
maxvalue 999999999;
----创建触发器
create or replace trigger T_PLAN_NEW_NEXTVAL
before insert on T_PLAN_NEW
for each row
begin
select user_seq.nextval into :new.id from dual;
end;
create or replace trigger 触发器名字 触发时间 触发事件
after(before) insert or update or delete on 表名 for each row
begin
pl/sql
end
=====================================语法说明=====================================================================
=====================================语法说明=====================================================================
--创建序列的语法 --
create sequence [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
--修改序列的语法--
alter sequence [user.]sequence_name
[increment by n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
3、序列参数说明
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
----------创建触发器语法-------
oracle创建触发器
create or replace trigger 触发器名字 触发时间 触发事件
after(before) insert or update or delete on 表名 for each row
begin
pl/sql
end
触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。