Function GUID(len_in In Number := 32) Return Varchar2 As
lenBase Number(38);
indexCurr Number(38);
indexLast Number(38);
v_Str Varchar2(400) := '';
v_tmp Varchar2(400) := '';
Begin
--时间: 2021-03-23
--功能: 生并返回一个全球唯一的标识符(原始值)转为len_in位数据值。
--生成数据
Select Rawtohex(Sys_GUID()) Into v_Str From Dual;
lenBase := Length(v_Str);
--校验长度
If len_in <= lenBase Then
Return(v_Str);
End If;
indexLast := 1;
--生成随机数
For R In (Select RN
From (Select Rownum rn
From Dual
Connect By Rownum <= len_in ----- 范围
Order By dbms_random.value)
Where Rownum <= (len_in - lenBase) -----个数
And RN Between 2 And (lenBase - 1)
Order By RN Asc)
Loop
--组织数据
indexCurr := r.rn;
v_tmp := v_tmp || Substr(v_Str, indexLast, indexCurr - indexLast) || Chr(45);
indexLast := indexCurr;
End Loop;
--拼接最后一段
v_tmp := v_tmp || Substr(v_Str, indexLast, lenBase - indexLast + 1);
Return(v_tmp);
End;
Oracle生成随机数GUID
最新推荐文章于 2024-04-18 16:17:49 发布