如何能建立一个列,使得插入数据后系统自动加入序号。

lionfire 2005-03-22 04:59:10
例如:
列名:id
name
插入数据:
insert into mytable (name) values("myname");
然后数据库自动为id赋一个不重复的值。

我想问的是建立这个表,id的类型应该是什么?
...全文
242 点赞 收藏 11
写回复
11 条回复
liqian008 2005年03月23日
create trigger xxx before insert on "table_name" for each row

declare
newId nummber;
begin
select sequence.nextval() into newid from dual;
New.id:=newid;
end;/
回复 点赞
lionfire 2005年03月23日
多谢大家了
回复 点赞
commanddos 2005年03月23日
create sequence sq_id
minvalue 1 maxvalue 999999999999
start with 1
increment by 1
cache 20;
应该能看明白吧
可结合nextval(下一值))和currval(当前值)使用。
但是不保证sequence具有连续性,因为调用一次nextval,该序列就会自动加increment
回复 点赞
lxhlizhenhao 2005年03月23日
CREATE SEQUENCE LOCATIONS_SEQ
INCREMENT BY 100
START WITH 1
MAXVALUE 9900
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER

则建立了一个系列,LOCATIONS_SEQ是系列名,NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
回复 点赞
luxuezhu 2005年03月23日
为什么问这个的那么多,不搜索一下呢?
回复 点赞
lionfire 2005年03月23日
sequence怎么定义啊,?
给个例子吧
回复 点赞
95277 2005年03月23日
之前我给的代码是把序列建在触发器里。
在插入的时候
例如:insert into tablename (id,name) values(0,'name');
把插序列的地方写个0就可以了。免得每次插入是写xxx.nextval这句话太麻烦。
回复 点赞
zealot_zk 2005年03月22日
使用一个序列(sequence),它是一个类似sql server中id的对象,但是在使用时oracle不保证存储时sequence的连续性。
回复 点赞
binkou 2005年03月22日
做一个sequences(序列sq)定义它的初始值、最大值、增长值。插入语句如下:
insert into mytable (name,id) values("myname",sq.nextval);
回复 点赞
95277 2005年03月22日
可以做一个触发器。
当插入的时候会自动触发将ID加一。


create or replace trigger auto_increase_id
before insert on test
for each row
declare
next_id number;
begin
select seq_test.nextval
into next_id
from dual;
:new.id:=next_id;
end;
回复 点赞
cyberhui 2005年03月22日
oracle 本身系统就有这个功能,自动会在表最后加上一个20位的ROWID字段,varchar型的。每条记录的RowID都不一样
回复 点赞
发动态
发帖子
基础和管理
创建于2007-09-28

7175

社区成员

9.5w+

社区内容

Oracle 基础和管理
社区公告
暂无公告