ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Trigger】通过触发器,变通实现非空属性字段的赋值

【Trigger】通过触发器,变通实现非空属性字段的赋值

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-05-03 11:11:44 0 删除 编辑

在我们一个项目中,有这么一个需求:
往一个业务表中登录数据时,表中“序列号”的字段的值希望能够自动赋值。
我的处理步骤如下,记录一下:
1、定义一个sequence
2、定义一个触发器,检测到Insert处理发生时,给插入数据追加 “序列号”赋值处理。
例子代码如下。
1》业务表(t_info_work):
create table t_info_work  (      
   Seq   NUMBER(15)     Not Null, --序列号     
   col1  VARCHAR2(20)   Not Null,       
   col2  NUMBER(2,0)    Not Null,       
   col3  NUMBER(2,0)    Not Null              
);
 -- 约束及索引定义     
alter table t_info_work add constraint pk_t_info_work_01 primary key (seq); 
2》定义一个sequence
-- 业务表(t_info_work)的序列号字段(SEQ)用
-- Create sequence
create sequence info_work_seq
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
3》定义触发器
-- 业务表(t_info_work)的序列号字段(SEQ)用
-- Create trigger
create or replace trigger trg_info_work_seq
before insert
on t_info_work
for each row
begin
select info_work_seq.NEXTVAL into :NEW.SEQ from dual;
end;
/
4》测试
  --#####表定义
SQL> desc t_info_work;
Name Type         Nullable Default Comments
---- ------------ -------- ------- --------
SEQ  NUMBER(15)                            
COL1 VARCHAR2(20)                          
COL2 NUMBER(2)                             
COL3 NUMBER(2)             
  --#####数据插入前表没有记录
SQL> select * from t_info_work;
             SEQ COL1                 COL2 COL3
---------------- -------------------- ---- ----
  --#####插入一条数据(不包含seq字段)
SQL> insert into t_info_work(col1,col2,col3) values('AAAA',1,1);
1 row inserted
SQL> commit;
Commit complete
  --#####查看登录的数据
SQL> select * from t_info_work;
             SEQ COL1                 COL2 COL3
---------------- -------------------- ---- ----
               1 AAAA                    1    1
  --#####查看当前sequence 的值
SQL> select info_work_seq.currval from dual;
   CURRVAL
----------
         1
SQL>

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-694304/,如需转载,请注明出处,否则将追究法律责任。

上一篇: happy
请登录后发表评论 登录
全部评论

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    367481