產生動態首碼且自增號碼的Oracle函數

來源:互聯網
上載者:User

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語句塊中。

相關文章

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.