生成動態字首且自增號碼的Oracle函式

2022-02-11 07:18:28 字數 1247 閱讀 1702

create or replace

function getinvitationno(prev varchar2, num1 varchar2, num2 varchar2, sessionsetting varchar2)

return varchar2

authid current_user is pragma autonomous_transaction;-- 需要使用「current_user」的許可權防止無法執行「execute immediate」命令 & 「pragma autonomous_transaction」自製事務防止dml無法ddl的問題

totalprev varchar2(50);

hassequences number;

reno varchar2(50);

begin

-- 號碼的字首

totalprev := prev || num1 || num2 || sessionsetting;

-- 建立序列

select count(*) into hassequences from user_sequences where sequence_name=totalprev;

if hassequences <> 1 then

execute immediate 'create sequence '||totalprev||' increment by 1 start with 1 maxvalue 9999999 nocycle';

end if;

-- 通過動態的序列名取序列值,把獲取的序列值轉換為7位長度的字串,長度不足用「0」填充  

execute immediate 'select '''|| totalprev ||''' || to_char('||totalprev||'.nextval,''fm0000000'') from dual' into reno;

-- to_char()中fm後跟的0代表了數字的位數,不足的用「0」填充;加上「fm」可以避免空格的出現,前面的空格是為符號位保留的,如果是對負數使用to_char,則空格部分是用來顯示-的,因為是正數,所以不顯示+,而是以空格代替

return reno;

end;

測試

select getinvitationno('p', '1', '01', '114') from dual

-- dual 是 oracle中的乙個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中。

oracle中主鍵自增的生成步驟

均在oracle 10g下完成以下步驟 首先建立一張表 自己用的使用者表 create tabley user user id number 8 not null primary key,user name varchar2 20 not null,gender int not null,addre...

MSSQL 生成唯一自增資料的辦法

我的應用場景是多程序併發獲取這個計數,且要保證唯一且自增,我用的辦法是鎖表 計數表counter,就一行資料 下面是儲存過程 create procedure dbo getcount asbegin begin tran declare cc int select cc countnum from...

MongoDB的自增主鍵 id的生成機制講解

如果插入文件時沒有 id 鍵,系統會自動建立。mongodb中儲存的文件必須有這個 id 鍵。這個鍵的值可以是任意型別,預設是個objectid物件,每個文件有唯一的 id 確保集合中的每個文件都會被唯一標示。objectid是 id 的預設型別,不同的機器都能用全域性唯一的同種方法方便的生成。因為...