不过前面加0 就整成字符串了 肯定不行了 没必要这么做 如果你需要这样的数据 可以写语句的时候做处理 没必要在表里这样整的 下面是创建序列的语句
CREATE SEQUENCE BSITEMCUSTOM_ID_SEQ ---BSITEMCUSTOM_ID_SEQ 序列名(自定义的,前面是表名)
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;oracle中没有自动增长,只有序列号
添加一条记录和sqlserver一样
语法:insert into table(列,列,列) values(value,value,value);
如果有个自动增长列
可以用这种方法,首先创建一个序列号SEQ_Test
然后insert into table(ID,列,列) values(SEQ_Testnextval,value,value);触发器(trigger)或者序列(sequence)来实现。1、序列(sequence)create sequence Sequence_nameincrement by 1 --表示从1开始计值start with 1--每次增长1nomaxvalue / maxvalue 999999--有两个可选值,要么无最大值,要么指定最大值;minvalue 1 / nominvaluecycle--表示达到最大值后从头开始,也可以为nocycle;cache 10--指定cache的值。如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失 所以可以在createsequence的时候用nocache防止这种情况。order;--指定排序序列提供两个方法,NextVal和CurrVal。顾名思义,NextVal为取序列的下一个值,一次NEXTVAL会增加一次sequence的值;CurrVal为取序列的当前值。例如,插入记录时:insert tablename(id)values(sequence_idnextval);--sequence_id为序列名但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前sequence的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。2、触发器(trigger)create or replace triggertrigger_namebefore insert on your_sidtablenamefor each rowbegindeclarei number;cursor cur is select max(id) from your_sidtablename;BEGINopen cur;FETCH cur INTO i;if i is NULL then:newid := 0;//可以根据实际需要来定初始值else:newid := i + 1; //这里以1递增end if;Close cur;END;END;/其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名呃,简单点的方法:
在表中增加一个列,为自增序列,然后执行:
update
表
set
自增序列=rownum;
这样就把以前的3000多万行都编号了,然后再用sequence做序列;
这样快速,还不会出错。
使用如下函数实例
你上面的语句可以这样写:
select to_char(nvl(max(to_number(code_carrier)), 0) + 1, '0000') -- 几位就写几个0
into :newcode_carrier
from tb_code_carrier;
end if;
不过每次都需要 max() 不是很费效率吗?你可以使用序列进行转换
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)