oracle中的自动增长列的插入实现

我们知道,在oracle中自动增长类型是依靠sequence类实现的,但是我们在插入一条数据时不能像sqlServer或者mySql中那么方便必须使用sequence.nextval来取得输入的值,能不能做到和Sqlserver一样吗,比如有表:
create table EMP
(
EMPID NUMBER(4) not null,
EMPNAME VARCHAR2(4000),
EMPPASS VARCHAR2(4000),
EMPSEX NUMBER(1),
EMPLEVELID NUMBER(4),
EMPLASTLOGINTIME DATE
)
alter table EMP
add constraint EMP_PK primary key (EMPID)
然后有一个序列:
create sequence EMP_SEQ
minvalue 1
maxvalue 9999999999
start with 10
increment by 1
cache 20;
我们现在的问题是:能不能把序列EMP_SEQ与表自动绑定起来实现插入时的方便呢?

正常的插入语句是这样的:
insert into EMP (EMPID, EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME) values (emp_seq.nextval(),'Jerry','jerry',1,3,to_date('01-04-2007 12:41:21', 'dd-mm-yyyy hh24:mi:ss')

自动绑定之后应该是这样的:

insert into EMP

(EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME)
values ('tom', '202cb962ac59075b964b07152d234b70', 1, 6, to_date('01-04-2007 22:41:21', 'dd-mm-yyyy hh24:mi:ss'));

解决方法是:
在EMP表的插入时做一个触发器,自动修改插入的EMPID的值:

create or replace trigger "BI_EMP"
before insert on "EMP"
for each row
begin
select "EMP_SEQ".nextval into :NEW.EMPID from dual;
end;

这样就可以达到我们想要的效果。插入时就可以写成:

insert into EMP

(EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME)
values ('tom', '202cb962ac59075b964b07152d234b70', 1, 6, to_date('01-04-2007 22:41:21', 'dd-mm-yyyy hh24:mi:ss'));

要注意的是:由于使用触发器在自动插入empid因此在插入时上面黑体部分内容不能省略,如果省略,依然需要手工添加一个empId的值,才能正常插入,也就是说,必须这样:

insert into EMP values (任意整数值,'Jerry','jerry',1,3,to_date('01-04-2007 12:41:21', 'dd-mm-yyyy hh24:mi:ss')

否则无法正常运行,很明显这样做复杂了程序的可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值