在我们一个项目中,有这么一个需求:
往一个业务表中登录数据时,表中“序列号”的字段的值希望能够自动赋值。
我的处理步骤如下,记录一下:
1、定义一个sequence
2、定义一个触发器,检测到Insert处理发生时,给插入数据追加 “序列号”赋值处理。
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
);
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);
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;
-- 业务表(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;
/
-- 业务表(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> 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;
SQL> select * from t_info_work;
SEQ COL1 COL2 COL3
---------------- -------------------- ---- ----
---------------- -------------------- ---- ----
--#####插入一条数据(不包含seq字段)
SQL> insert into t_info_work(col1,col2,col3) values('AAAA',1,1);
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;
SQL> select * from t_info_work;
SEQ COL1 COL2 COL3
---------------- -------------------- ---- ----
1 AAAA 1 1
---------------- -------------------- ---- ----
1 AAAA 1 1
--#####查看当前sequence 的值
SQL> select info_work_seq.currval from dual;
SQL> select info_work_seq.currval from dual;
CURRVAL
----------
1
----------
1
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-694304/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20335819/viewspace-694304/