美文网首页
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