Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67214
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 272
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-17 23:48
个人简介

UNIX、Linux、Oracle

文章存档

2013年(11)

我的朋友

分类: Oracle

2013-06-19 08:11:55

创建Oracle触发器用于表中序列值自增长(Helloblock写作)

 

SQL> conn scott/oracle

使用scott用户操作,不要使用sys帐号操作。

 

1、创建一张测试表tb1


SQL> create table tb1
      (id int primary key,

name varchar2(20)

);

 

2、创建序列seq_id 


SQL> create sequence seq_id 

minvalue 1                 --最小值
start with 1                 --初始值

increment by 2              --每次增长量

maxvalue 999999999999     --最大值

nocache                    --序列不放在缓存中

nocycle;                    --序列不循环

 

3、查看序列是否可用:


SQL> select seq_id.nextval from dual;

      NEXTVAL

----------

         1

 

4、创建行级触发器:


SQL> create or replace trigger tri_tb1_insert
      before insert on tb1       --插入前触发 
      for each row              --行级触发器
      declare
         id int;
      begin
         --1:                  --获取一个序列号
         dbms_output.put_line('----------');
         select seq_id.nextval into id from dual;
         :new.id:=id;
         --2:                  --把序列号添加到即将插入的表中 
        end;

/

 

5、测试触发器是否可以实现序列号自增长:

SQL> insert into tb1(name) values('zhangsan');

 

1 row created.

 

SQL> select * from tb1;

 

        ID NAME

---------- ----------------------------------------

         3 zhangsan

 

SQL> insert into tb1(name) values('lisi');

 

1 row created.

 

SQL> select * from tb1;

 

        ID NAME

---------- ----------------------------------------

         3 zhangsan

         5 lisi

看到tb1表中的id列数据是自动输入的。

 

mail:helloblock@126.com

QQ:1654294099

阅读(1127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~