--獲取序列號mssql
create procedure [dbo].[getglide]
@fn varchar(100),--序列號字典中某規則的名稱
@glide varchar(100) output--輸出當前序列號
asdeclare
@i int =0,
@strlen int = 0,
@strtemp varchar(20) = '',
@exception int=0,
@t_count int=0,--當前序列號值(變化部分)
@prefix varchar(4),--字首
@postfix varchar(4),--字尾
@dateglide char(1),--是否包含時間 (1 包含 0 不包含)
@glidelen int--序列號總長度
begin
----初始值
select @exception=count(*) from sys_business_glide where fname=@fn
select @t_count=glide,@prefix=prefix,@postfix=postfix,@dateglide=dateglide,@glidelen=glidelen
from sys_business_glide where fname=@fn
----不存在此序列號
if(@exception=0)
begin
set @glide='當前不存在此名稱的序列號規則'
end----存在此序列號
else
begin
set @t_count=@t_count+1
--------拼接序列號
if(@dateglide='1')--包含時間
begin
set @strlen=len(@prefix+replace(convert(varchar(10),getdate(),23),'-','')+cast(@t_count as varchar)+@postfix)
if(@glidelen>@strlen)--需補0
begin
while @i<(@glidelen-@strlen)
begin
set @strtemp=@strtemp+'0'
set @i=@i+1
endset @glide=@prefix+replace(convert(varchar(10),getdate(),23),'-','')+@strtemp+cast(@t_count as varchar)+@postfix
endelse if (@glidelen=@strlen)--不需要補0
begin
set @glide=@prefix+replace(convert(varchar(10),getdate(),23),'-','')+cast(@t_count as varchar)+@postfix
endelse--長度超出
begin
set @glide='序列號長度設定有問題'
endend
else--不包含時間
begin
set @strlen=len(@prefix+cast(@t_count as varchar)+@postfix)
if(@glidelen>@strlen)--需補0
begin
set @i=0
while @i<(@glidelen-@strlen)
begin
set @strtemp=@strtemp+'0'
set @i=@i+1
endset @glide=@prefix+@strtemp+cast(@t_count as varchar)+@postfix
endelse if (@glidelen=@strlen)--不需要補0
begin
set @glide=@prefix+cast(@t_count as varchar)+@postfix
end
else--長度超出
begin
set @glide='序列號長度設定有問題'
endend
--------修改當前變化部分值
update sys_business_glide set glide=cast(@t_count as int) where fname=@fn
endend
--獲取序列號oracle
create or replace procedure getglide(fn in varchar2,fglide out varchar2) is --序列號字典中某規則的名稱 輸出當前序列號
i integer :=0;
strlen integer :=0;
strtemp varchar2(20);
strjoin varchar2(100);
t_exception integer :=0;
t_count integer :=0;--當前序列號值(變化部分)
t_prefix varchar2(4);--字首
t_postfix varchar2(4);--字尾
t_dateglide char(1);--是否包含時間 (1 包含 0 不包含)
t_glidelen integer :=0;--序列號總長度
begin
----初始值
select count(*) into t_exception from sys_business_glide where fname=fn;
select prefix,postfix,dateglide,glide,glidelen into t_prefix,t_postfix,t_dateglide,t_count,t_glidelen from sys_business_glide where fname=fn;
----不存在此序列號
if t_exception=0 then
fglide := '當前不存在此名稱的序列號規則';
----存在此序列號
else
t_count:=t_count+1;
--------拼接序列號
if t_dateglide = '1' then --包含時間
strlen := length(t_prefix||to_char(sysdate,'yyyymmdd')||cast(t_count as varchar2)||t_postfix);
if t_glidelen>strlen then --需補0
while i<(t_glidelen-strlen) loop begin strtemp:=strtemp||'0'; i:=i+1; end; end loop; fglide:=t_prefix||to_char(sysdate,'yyyymmdd')||strtemp||cast(t_count as varchar2)||t_postfix;
elsif t_glidelen=strlen then --不需要補0
fglide := t_prefix||to_char(sysdate,'yyyymmdd')||cast(t_count as varchar2)||t_postfix;
elsif t_glidelenstrlen then--需補0
while i<(t_glidelen-strlen) loop begin strtemp:=strtemp||'0'; i:=i+1; end; end loop; fglide:=t_prefix||strtemp||cast(t_count as varchar2)||t_postfix;
elsif t_glidelen=strlen then--不需要補0
fglide:=t_prefix||cast(t_count as varchar2)||t_postfix;
elsif t_glidelen測試:在sql視窗中測試成功,但是在測試視窗中失敗(報無效引數);
declare mm varchar2(100);
begin
getglide('aa',mm);
dbms_output.put_line(mm);
end;
序列號生成器
生成序列號,最大值為max val。如果達到max val,從0開始。public class serialgenerator return serialno 求整數有幾位,如234是3位。param i return private static final int getrnum int i i...
重新生成序列號
建完序列號,並觸發序列號後,並插入了資料,但是過一段時間又清空了表的資料,再重新插入資料,這個時候再取序列號會續著上一次的序列號,如果想重新開始就要刪除序列號生成器,再重建序列號 建立序列號 create sequence aby yzfpayment method seq increment by...
序列生成 常用的特殊序列號生成公式大全
在excel函式中,有時候我們需要生成特殊的序列號。如果用人工乙個個設定太繁瑣,且容易出錯,我們可以運用excel行 列函式,再搭配相應的函式就能生成特殊的序列號。今天讓我們一起來學習如何生成特殊的序列號。一 row函式 row函式是函式中的一種,作用是返回乙個引用的行號。如果省略 referenc...