美文网首页
201023:Oracle数据库中创建序列-Oracle触发器写

201023:Oracle数据库中创建序列-Oracle触发器写

作者: 弹钢琴的崽崽 | 来源:发表于2020-10-23 20:30 被阅读0次

一. Oracle数据库中创建序列

序列(sequence)就是所谓的序列号,每次取的时候它会自动增加。

创建序列的基本语法为:

create sequence My_First_Sequence
start with 起始值(默认为1)
increment by 间隔数(每次加多少,如果省略,则默认为1)
maxvalue 最大值
minvalue 最小值
nocycle --一直累加,不会循环
nocache ;--不用缓存

Oracle不像mysql一样可以创建自增的主键ID,所在在需要某一字段或者是主键自增的时候,我们就需要在Oracle中创建序列,一般创建的序列名都是SEQ_TableName这样命名的。

-- Create sequence
create sequence SEQ_TableName
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

其中minvalue表示最小值,maxvalue表示最大值,increment by表示步增,cache的话表示缓存。一般startwith就是从最小值开始的,当然也可以不一样。

创建的序列后,还需要创建触发器来使序列生效。

-- 建立触发器
create trigger "simon_trigger" before
insert on table_name for each row 
begin
select SEQ_TableName.nextval into:new.id from dual;
end;

这个触发器表示在向table_name中插入新数据时,会先在序列中获取下一个值,然后赋值给新数据的id。

然后在代码中就不需要关注这个ID了,它会自增并且插入。

那如果想生成字符串类型的字母加数字自增应该怎么办呢?

比如说"A0001","A0002"

那么就先创建一个自增序列,然后在调用触发器的时候稍做该表即可

语句如下:

-- 建立触发器
create trigger "simon_trigger" before
insert on table_name for each row 
begin
select 'A'||SEQ_TableName.nextval into:new.id from dual;
end;

二. oracle触发器写法

create or replace trigger t_after_table --create or replace trigger 触发器名称
after insert   ---时间 after/before 事件 insert or update or delete
on student   ---作用的表 on tablename
FOR EACH ROW --  指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器

declare              --trigger 的主题
begin
insert into student_state(SSID,Ssstate) values(:NEW.SID,:NEW.SID);
end;

注释:

  • before和after:指在事件发生之前或之后激活触发器。
  • instead of:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。
  • insert、delete和update:指定构成触发器事件的数据操纵类型,update还可以制定列的列表。
  • referencing:指定新行(即将更新)和旧行(更新前)的其他名称,默认为new和old。
  • table_or_view_name:指要创建触发器的表或视图的名称。
  • for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器。
  • when:限制执行触发器的条件,该条件可以包括新旧数据值得检查。
  • declare---end:是一个标准的PL/SQL块。

相关文章

网友评论

      本文标题:201023:Oracle数据库中创建序列-Oracle触发器写

      本文链接:https://www.haomeiwen.com/subject/zilbmktx.html