Oracle產生流水號

來源:互聯網
上載者:User

標籤:

  • 流水號規則表Rul_Sequence:

 

規則表中的資料:

產生流水號輔助的預存程序:
CREATE OR REPLACE PROCEDURE Proc_GetSeqence(SeqCode in  varchar2,ReturnNum out Varchar2,MessageCode out varchar2 )    -- 異常訊息等isseqNowNumStr VARCHAR2(20);SeqNowNum int;            --當前值year CHAR(4);                --年 YYYYmonth CHAR(2);                --月 MMday CHAR(2)    ;            --日 DDNowLength int;                    --流水號長度DataFormat VARCHAR2(50);        --流水號規則IniValue int;                --歸零值ResetType VARCHAR2(10);        --歸零方式LastDate    CHAR(8);            --日期最大值WorkFLowStr VARCHAR2(20);     --前一次調用流水號時的日期值DataNow CHAR(8);            --當前日期i int;                        --轉換變數,作用參照代碼上下文begin    /* 初始設定變數 */     MessageCode:=‘888‘;--成功執行     ReturnNum := ‘0‘;     NowLength:=0;     SeqNowNum :=0;     DataNow:=to_char(sysdate,‘yyyymmdd‘); --得到 20130704 的時間格式     year:=substr(DataNow,1,4);     month :=substr(DataNow,5,2);     day :=substr(DataNow,7,2);   i:=1 ;   Select   Value_length,Now_SeqValue,Date_Max,Data_Format,Reset_Type,Init_Value           into NowLength,SeqNowNum,LastDate,DataFormat,ResetType,IniValue            From RUL_Sequence where Seq_Code=SeqCode; <<wait>> Update RUL_Sequence Set Is_Running=‘2‘ where Seq_Code=SeqCode and is_running=‘1‘; if sql%rowcount=0 then   /***********如果有並發的正在運行,最多等待1秒,然後繼續運行 *******/   dbms_lock.sleep(1); --grant execute on dbms_lock to dhlink 需要授權   goto wait;end if;commit;If (ResetType=2 and DataNow<>LastDate  AND IniValue>0)        OR (ResetType=3 and year||month<>substr(LastDate,1,6) AND IniValue>0)        OR (ResetType=4 and year<>substr(LastDate,1,4) AND IniValue>0 ) then            SeqNowNum:=IniValue; end if;i:=NowLength; --i 此時表示流水號的總長度WorkFLowStr:=‘<‘;WHILE NowLength>0     loop         WorkFLowStr:=WorkFLowStr||‘X‘;         NowLength:=NowLength-1;     end loop;     WorkFLowStr:=WorkFLowStr||‘>‘ ;     /***********拼流水號格式 End*******/     SeqNowNumStr:=to_char(SeqNowNum);     NowLength:=i-length(seqNowNumStr);     /***********補零操作 Start*******/     WHILE NowLength>0     loop         SeqNowNumStr:=‘0‘||SeqNowNumStr;         NowLength:=NowLength-1;     end loop;     /***********補零操作 End*******/     ReturnNum:=REPLACE(DataFormat,‘<YYYY>‘,year);            -- 把規則中<YYYY>替換成相應年     ReturnNum:=REPLACE( ReturnNum,‘<MM>‘,month);                -- 把規則中<MM>替換成相應月     ReturnNum:=REPLACE( ReturnNum,‘<DD>‘,day);                -- 把規則中<DD>替換成相應日     ReturnNum:=REPLACE( ReturnNum,WorkFLowStr,SeqNowNumStr);-- 把規則中的形如<XXX>的替換成相應流水號,     /***********更新當前流水值為最大流水號、上一個流水號產生時間和運行標記(運行標記置為"1"(沒有運行) ) Start*******/     UPDATE RUL_Sequence SET Now_SeqValue=SeqNowNum+1,Date_Max=DataNow,IS_RUNNING=‘1‘, Edit_Time=SYSDATE     WHERE Is_Running=‘2‘ AND  Seq_Code=SeqCode;     commit;     /***********更新當前流水值為最大流水號、上一個流水號產生時間和運行標記(運行標記置為"1"(沒有運行) ) End*******/exceptionwhen others thenrollback;MessageCode:=‘無此編號規則‘||MessageCode;end Proc_GetSeqence;-- SELECT * FROM RUL_Sequence

 

Oracle產生流水號

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.