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


在我们一个项目中,有这么一个需求:
往一个业务表中登录数据时,表中“序列号”的字段的值希望能够自动赋值。
我的处理步骤如下,记录一下:
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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20335819/viewspace-694304/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值