Oracle的自增序列、触发器、序列

来源:互联网 发布:升调降调软件 编辑:程序博客网 时间:2024/06/03 00:04

1.首先是序列的定义:

  CREATE SEQUENCE sequence  //创建序列名称

       [INCREMENT BY n]  //递增的序列值是如果n是正数就递增,如果是负数就递减 默认是1

       [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循环/不循环

       [{CACHE n | NOCACHE}];//分配并存入到内存中

 

  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

  CURRVAL 中存放序列的当前值

  NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

例子:

   create sequence SYID2  minvalue 1  maxvalue 9999999999999  start

 with 9  increment by 1 nocache order;

调用:

select SYID2.nextval from dual;


2.其次是触发器的定义:

CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.] view_name --只能定义在视图上
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ] --因为INSTEAD OF触发器只能在行级上触发,所以没有必要指定
[WHEN condition]
PL/SQL_block | CALL procedure_name; 

:new --为一个引用最新的列值;
:old --为一个引用以前的列值这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.update语句两个都有,insert只有:new ,delect 只有:old;

   例子: create or replace trigger SYIDtrigger2   //触发器名字

     before insert on ashare_cjhb        //触发条件

     for each row    //触发级别

     begin

     select SYID2.nextval into :new.rec_num from dual;     //pl/sql

          end;

       /


自增长序列的实现:(原理就是在触发器中定义要触发的事件,然后在触发器中实现在触发该事件是使用sequence,就达到了自增长的目的) 

 

 drop sequence SYID2;

    create sequence SYID2 increment by 1 start with 1 minvalue 1 maxvalue 9999999999999 nocache order;

    --drop trigger SYIDtrigger;

    create or replace trigger SYIDtrigger2

    before insert on ashare_cjhb

    for each row

    begin

    select SYID2.nextval into :new.rec_num from dual;

    end;

/



0 0
原创粉丝点击