用sequence+trigger实现oracle字段自增长

来自http://tunps.com/oracle-field-auto-increment-by-sequence-with-trigger

oracle不像mysql,字段有个autoincrement属性,可以实现字段数值的自增长。有人觉得oracle这个都不能实现,还敢称最牛逼的数据库。其实我倒是觉得没有autoincrement属性,倒是体现了oracle的灵活性。此文讲述如果通过序列和触发器来实现一行数据在insert前实现某字段的自增。 首先随便建立一个表,menuId是需要自增的字段
create table menu(
      menuId number(10) not null primary key,
      name varchar2(40) not null,
      id_parent number(10) not null,
      url    varchar2(300) null
);
然后建立一个序列,最小值是minvalue,从1开始,步进为1递增,无循环,无缓存。关于create sequence的详细用法
create sequence menu_autoinc_seq
       minvalue 1
       start with 1
       increment by 1
       nocycle
       nocache;
然后建立一个触发器,在插入tun_menu表之前触发,选取序列的nextval作为新值。关于create trigger的详细用法
create or replace trigger menu_autoinc_tg
       before insert on menu for each row   
begin
       select menu_autoinc_seq.nextval into :new.id from dual;
end menu_autoinc_tg; 
然后测试一下:
insert into menu values('','个人事务',0,'indi.php');
insert into menu values('','公共事务',0,'public.php');
insert into menu values('','信息维护',0,'maintain.php');
insert into menu values('','后台管理',0,'manage.php');

About tunpishuang

just 4 fun·····
This entry was posted in 未分类 and tagged . Bookmark the permalink.

One Response to 用sequence+trigger实现oracle字段自增长

  1. Pingback: 让codeigniter的oci8 db driver支持insert_id() | TechGuru

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>