Oracle中自增字段的两种方法的比较(Trigger和Sequence)

王朝oracle·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在ORACLE中,没有象MS-SQLSERVER中那样子有自增字段,但是如果我们要实现这个功能,有2种方法

1 Trigger

sql语句如下:

create or replace trigger trigger_name

before insert on your_sid.tablename

for each row

begin

declare

i number;

cursor cur is select max(id) from your_sid.tablename;

BEGIN

open cur;

FETCH cur INTO i;

if i is NULL then

:new.id := 0; //可以根据实际需要来定初始值

else

:new.id := i + 1; //这里以1递增

end if;

Close cur;

END;

END;

/

其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名,

2 Sequence

sql语句如下:

create sequence your_sid.sequence_name

increment by 1 //指定序列以1递增,如果没指定,默认值1会使用

start with 1 //由1开始计数

nomaxvalue //不设置最大值

minvalue 1 //设置最小值1

cache 20 //预分配缓存大小为20

order

二者的区别在于,Sequence的效率要比Trigger的高,因为Trigger每次都要遍历表中所有记录以寻找ID最大值,而Sequence每次执行后,都会保留最大值;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航