oracle在触发器中,如何获得自增id的值,并实现更新数据!
在项目中,有一张表,需要在用户在插入一条记录时,同时更新字段other_id,要求other_id的值为刚插入的记录的id(id为自增字段),请问怎么写sql啊?我的思路...
在项目中,有一张表,需要在用户在插入一条记录时,同时更新字段other_id,要求other_id的值为刚插入的记录的id(id为自增字段),请问怎么写sql啊?
我的思路如下:
表:
create table a (id int not null,nvarchar(20),other_id int);
触发器:
create trigger changeField_trigger after insert
on a
for each row
begin
update a set other_id=:new.id where id=:new.id;
end;
但是插入数据时会报错!请问高手怎么解决啊? 展开
我的思路如下:
表:
create table a (id int not null,nvarchar(20),other_id int);
触发器:
create trigger changeField_trigger after insert
on a
for each row
begin
update a set other_id=:new.id where id=:new.id;
end;
但是插入数据时会报错!请问高手怎么解决啊? 展开
1个回答
展开全部
create table t_a (id int not null, y varchar(20), other_id int);
create sequence SEQ_A_id
minvalue 1
maxvalue 9999999999;
create or replace trigger changeField_trigger before insert on t_a
-- 这个一定要用before不能用after。
for each row
begin
select seq_a_id.nextval
into :new.id
from dual;
:new.other_id := :new.id;
end;
-- 测试
insert into t_a(y) values ('test1');
insert into t_a(y) values ('test2');
insert into t_a(y) values ('test3');
select * from t_a;
D X OTHER_ID
---------------------------------------
1 test1 1
2 test2 2
3 test3 3
create sequence SEQ_A_id
minvalue 1
maxvalue 9999999999;
create or replace trigger changeField_trigger before insert on t_a
-- 这个一定要用before不能用after。
for each row
begin
select seq_a_id.nextval
into :new.id
from dual;
:new.other_id := :new.id;
end;
-- 测试
insert into t_a(y) values ('test1');
insert into t_a(y) values ('test2');
insert into t_a(y) values ('test3');
select * from t_a;
D X OTHER_ID
---------------------------------------
1 test1 1
2 test2 2
3 test3 3
追问
id不是序列,怎么实现啦?
追答
id不是序列就复杂了,那你只能自己建一个表,插一条数据进去,数据就是你的最大的id号,每次用的时候取出来+1,取得时候要将记录锁住。
如果id列只是主键,无实际意义,建议你用序列。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询