需求:生成交易流水号,每次新增一条记录时都自动加1,且流水号形式为000000001形式的10位数字。
思路:利用序列可以生成自增的流水号,只需要在前面添加N个0即可,同时,由于数字的长度一定,因此可以组合使用序列和lpad()函数满足此需求
代码如下:
--生成序列
create sequence SEQ_TEST--序列名称
increment by 1 --增长量
start with 1 --起始数
minvalue 1
cache 20;SELECT SEQ_TEST.Nextval FROM dual; --序列的两个方法:nextval、currval
SELECT SEQ_TEST.currval FROM dual; DROP SEQUENCE SEQ_TEST; --删除序列
SELECT LPAD(SEQ_TEST.nextval,10,'') FROM dual; --查询生成序列的效果,具体使用可自行修改
补充:
lpad函数是Oracle数据库函数,lpad函数从左边对字符串使用指定的字符进行填充。从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思。
语法格式如下:
lpad( string, padded_length, [ pad_string ] )
说明:
string 准备被填充的字符串;
padded_length 填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
pad_string 填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。