Oracle 生成流水號解決方案

2021-06-27 12:50:43 字數 523 閱讀 2886

不同於一般的序列,需要在每個週期(比如每天)初始化編號,然後本週期內按照業務順序遞增。

建立一張資料庫表t,儲存當前流水號,並在字段(週期,流水號)上建立唯一索引。

獲取本週期下乙個流水號的大致邏輯如下:

(1)首先查詢本週期的當前流水號,使用for update加鎖。

(2)如果查詢成功,則流水號加1;結束。

(3)如果查詢不成功,表示當前週期並未生成過流水號,則迴圈執行以下過程:

(4)select * from t for update nowait;嘗試對錶加鎖;

(5)如果加鎖成功,則插入一條記錄(本週期的初始流水號),返回該流水號;結束。

(6)如果加鎖不成功,則有可能是其他程序在第2、3步之間執行了插入操作,返回第(1)步。迴圈,直到獲取流水號為止。

注意:如果表中沒有資料,那麼執行第(4)步時是不會加鎖的。

附流程圖如下:

Oracle 生成流水號

輔助表 rul sequence 表中資料如圖 輔助儲存過程 proc getseqence create or replace procedure proc getseqence seqcode in varchar2,returnnum out varchar2,messagecode out ...

Oracle流水號生成函式

使用oracle函式在建立表的時候自動加入生成的流水號 生成格式是 字首 年月日 00000 直接上 加注釋 create or replace function fn no make v type varchar2,v number col varchar2,v table name varcha...

Oracle 生成流水號函式

code sql code create or replace function fn no make v type varchar2,v number col varchar2,v table name varchar2 編碼示例 djjt12090600003 author rock.et cr...