oracle在触发器中,如何获得自增id的值,并实现更新数据!

在项目中,有一张表,需要在用户在插入一条记录时,同时更新字段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;
但是插入数据时会报错!请问高手怎么解决啊?

第1个回答  推荐于2016-05-27
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追问

id不是序列,怎么实现啦?

追答

id不是序列就复杂了,那你只能自己建一个表,插一条数据进去,数据就是你的最大的id号,每次用的时候取出来+1,取得时候要将记录锁住。
如果id列只是主键,无实际意义,建议你用序列。

本回答被提问者采纳

oracle在触发器中,如何获得自增id的值,并实现更新数据!
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 :...

SQL Server Oracle如何实现自增ID
在插入数据时,自动的id会递增,无需手动指定。例如:INSERT INTO ZTB_ZHSP_TEST(MATNR,MAKTX) VALUES('1400500100034','FS903+FS5600七夕限定礼盒套装')而在Oracle中,自增ID通常使用序列和触发器来管理。首先创建序列:CREATE SEQUENCE ZTB_ZHSP_TEST_FID INCREMENT BY 1 START WITH 1 NOCACHE;接着...

oracle怎么实现id自增和设置主键
(1)ID自增可以使用sequence实现,创建sequence的语句如下:create sequence SEQ_ID \/*Sequence名称为SEQ_ID*\/minvalue 1 \/*最小值*\/maxvalue 99999999 \/*最大值*\/start with 1 \/*开始值*\/increment by 1 \/*每次增加的值*\/cache 20; \/*缓存个数*\/插入时使用SEQ_ID.NEXTVAL取下一个值。

oracle触发器记录字段变更
另一种思路是这样,更新的记录有old值和new值,两条记录,对这两条记录进行操作,比如:tab1的表为:id col1 col2 col3 col4 col5 1 B A I D U更新了tab1的col2字段变为:id col1 col2 col3 col4 col5 1 B HELLO I D U 产生了old...

在oracle 怎样设置自动递增的的字段?
constraint 和 primary key是关键字,pk_id是主键名称,自定义的额,只要不重复即可。也可以自动一些,对表的插入操作,建立一个触发器,每当有数据插入时,触发器自动修改id值为序列的新值,这样就完全实现自增id功能了。不过其实也没有这个必要。因为触发器如果建多了,有时会比较混乱,不易管理。

在Oracle 中设置自增列
首先,创建一张测试表,然后定义一个序列,每次插入数据时,将自增列的值设置为序列的下一个值。如果需要,还可以创建触发器,在插入数据时自动更新该列的值,简化操作流程。在Oracle中使用序列和触发器实现自增列有一些需要注意的点。例如,插入指定ID值时,序列会从该值的下一个开始继续递增,但需要...

oracle如何实现插如记录时ID自增
首先建立一个序列:create sequence seq_atable minvalue 1 maxvalue 9999999 start with 1 increment by 1 nocache2.建立一个触发器:create or replace trigger trg_atable before insert on li_line_fence for each rowbegin select seq_atable.nextval into :new.fenceid from dual;...

oracle 自增触发器
1、创建表 create tabletest_user(user_id number(10,0) primary key,user_name varchar2(40));2、创建序列 create sequencetest_user_seq start with 1 maxvalue 9999999999 increment by 1;3、创建触发器 create or replace triggertest_user_trigger before insert ontest_user for each row beg...

oracle数据库如何创建自增列的技巧教程
oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。先建一个测试表了:create table userlogin (id number(6) not null,name varchar2(30) not null primary key )tablespace users \/ 第一步:创建SEQUENCE create sequence userlogin_seq increment by 1 start ...

oracle 如何用触发器实现更新刚插入的数据
create or replace trigger tr_name before insert on 表 for each row begin :new.某字段='新值';end;

相似回答