sql発生流水番号
13534 ワード
1つの発生流水番号(年月日+5ビット流水番号)の記憶過程
データベース・テーブルでプライマリ・キーであり、varcharタイプである090611+000001(年月日+5桁の流水番号)などの流水番号を生成する必要があります.当日以内にこの番号を挿入すると、この番号は増加します.すなわち、0906110000010906110000002090610000003です.当日でない場合は、090612000001から増加しなければなりません.ストレージ・プロシージャを作成しました.
create procedure test_proc @id nvarchar(13) outputas
begin set nocount on declare @date nvarchar(8), @maxdj_no numeric(13,0) select @date = convert(nvarchar(20),getdate(),112) , @maxdj_no = convert(numeric(13,0),max(id)) from XT_DJNO if substring(convert(char(20),@maxdj_No),1,6)=substring(@date,3,8)--文書番号begin select@id=convert(nvarchar(13),@maxdj_が当日生成された場合no+1)--print(@maxdj_no+1) insert into XT_DJNO values(substring(@id,3,13),substring(convert(char(20),@maxdj_no),1,6)) --print(substring(convert(char(20),@maxdj_no),1,6)) return end else begin set @date=substring(@date,3,8) set @id = @date + '00001' insert into XT_DJNO values(@id,convert(nvarchar(13),@maxdj_no)) --print(substring(@date,3,8)) return endend
ORACLEでストリーム番号を生成するシーケンスを作成する:create sequence EXAMPLE_SEQ increment by 1 start with 1 minvalue 1 cache 20;EXAMPLEテーブルにフリップフロップCREATE OR REPLACE TRIGGER"PORTAL"を作成する.TRI_EXAMPLE_TABLE BEFORE INSERT ON EXAMPLE_TABLE FOR EACH ROW begin select to_char(sysdate,'YYYYMMDD')||to_char(EXAMPLE_SEQ.nextval,'0000') into :new.EXAMPLE_ID from dual; end;
まず、データベースに流水番号を格納するテーブルを作成します.
上のコードではCateフィールドは流水番号の頭で、次の記憶過程でパラメータで入力できます.私の定義は2文字です.これは具体的な必要に応じてDateNoフィールドを変更して日付情報Seqフィールドを流水番号にすることができますが、最終的に生成された流水番号はこの3つのフィールドの加算で記憶過程を作成します.
このストレージ・プロシージャの最終出力の結果は、AA 0710310000001の前の2つが入力パラメータであり、中間の4つが年の後の2つと月であり、最後の6つが6桁の数字の流水番号である.また、上記のストレージ・プロシージャを変更して、必要に応じたストリーム番号を生成することもできます.
転載先:https://www.cnblogs.com/Eleanore/p/sql_%e6%b5%81%e6%b0%b4%e5%8f%b7.html
データベース・テーブルでプライマリ・キーであり、varcharタイプである090611+000001(年月日+5桁の流水番号)などの流水番号を生成する必要があります.当日以内にこの番号を挿入すると、この番号は増加します.すなわち、0906110000010906110000002090610000003です.当日でない場合は、090612000001から増加しなければなりません.ストレージ・プロシージャを作成しました.
create procedure test_proc @id nvarchar(13) outputas
begin set nocount on declare @date nvarchar(8), @maxdj_no numeric(13,0) select @date = convert(nvarchar(20),getdate(),112) , @maxdj_no = convert(numeric(13,0),max(id)) from XT_DJNO if substring(convert(char(20),@maxdj_No),1,6)=substring(@date,3,8)--文書番号begin select@id=convert(nvarchar(13),@maxdj_が当日生成された場合no+1)--print(@maxdj_no+1) insert into XT_DJNO values(substring(@id,3,13),substring(convert(char(20),@maxdj_no),1,6)) --print(substring(convert(char(20),@maxdj_no),1,6)) return end else begin set @date=substring(@date,3,8) set @id = @date + '00001' insert into XT_DJNO values(@id,convert(nvarchar(13),@maxdj_no)) --print(substring(@date,3,8)) return endend
ORACLEでストリーム番号を生成するシーケンスを作成する:create sequence EXAMPLE_SEQ increment by 1 start with 1 minvalue 1 cache 20;EXAMPLEテーブルにフリップフロップCREATE OR REPLACE TRIGGER"PORTAL"を作成する.TRI_EXAMPLE_TABLE BEFORE INSERT ON EXAMPLE_TABLE FOR EACH ROW begin select to_char(sysdate,'YYYYMMDD')||to_char(EXAMPLE_SEQ.nextval,'0000') into :new.EXAMPLE_ID from dual; end;
まず、データベースに流水番号を格納するテーブルを作成します.
CREATETABLE[dbo].[NumSeq] (
[Cate][varchar] (2) NOTNULL ,
[DateNo][varchar] (4) NOTNULL ,
[Seq][int]NULL ,
[CrTime][datetime]NOTNULL
)
上のコードではCateフィールドは流水番号の頭で、次の記憶過程でパラメータで入力できます.私の定義は2文字です.これは具体的な必要に応じてDateNoフィールドを変更して日付情報Seqフィールドを流水番号にすることができますが、最終的に生成された流水番号はこの3つのフィールドの加算で記憶過程を作成します.
CREATEPROC dpPMT_SGetMaintainSeq
@MaintainCateVARCHAR(2)
AS--*********************** *************************************************DECLARE@MaintainNoVARCHAR(12)
IFNOTEXISTS(SELECT*FROM
NumSeq
WHERE
Cate=@MaintainCateANDDATEDIFF(DAY,CrTime,GETDATE())=0)
BEGININSERTINTO
NumSeq(Cate,DateNo,Seq)
values(@MaintainCate,RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE())),0)
ENDELSEBEGINUPDATE
NumSeq
SET
Seq=Seq+1WHERE
Cate=@MaintainCateAND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
END--************************ ***************************************************************SELECT@MaintainNo=Cate+DateNo+REPLICATE('0',6-LEN(Seq))+CONVERT(VARCHAR(6),Seq)
FROM
NumSeq
WHERE
Cate=@MaintainCateAND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
SELECT@MaintainNo
このストレージ・プロシージャの最終出力の結果は、AA 0710310000001の前の2つが入力パラメータであり、中間の4つが年の後の2つと月であり、最後の6つが6桁の数字の流水番号である.また、上記のストレージ・プロシージャを変更して、必要に応じたストリーム番号を生成することもできます.
転載先:https://www.cnblogs.com/Eleanore/p/sql_%e6%b5%81%e6%b0%b4%e5%8f%b7.html