序列號生成儲存過程

2021-06-06 07:41:36 字數 4096 閱讀 1859

--獲取序列號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...