我需要生成唯一的標識符,它必須不再是5的長度,因爲它的數字不適合,有沒有辦法在oracle數據庫中生成唯一的字符串?如何生成oracle字符串序列?
回答
這可能幫助: http://www.deep-data-mining.com/2012/06/five-ways-of-creating-unique-record.html
該位看起來有用:
據Oracle文檔,SYS_GUID生成並返回一個全局唯一標識符(原糖值),由16個字節。
例如,我們的Oracle系統上,我可以這樣做:
select sys_guid() uniq_id from dual;
而得到這樣的:
059D828192804EABE05400144FFB6CA7
下一次我:
059D828192A34EABE05400144FFB6CA7
一些數字每次遞增。
我可以限制到5個字符,其中包括每次運行時改變字符串的位:
select substr(sys_guid(),9,5) uniq_id from dual;
爲了得到例如
92D14
正如我所看到的,您只是剪切了生成的字符串,並且它可能不是唯一的。 – 2014-10-17 11:27:16
是的,對不起,我想我的回答可能是一堆舊垃圾: - \抱歉。我認爲這個號碼是獨一無二的,但也許它不會是我不確定的。對不起浪費時間。 – 2014-10-17 11:36:04
您可以嘗試使用基地36:http://en.wikipedia.org/wiki/Base_36
SQL:Base 36 to Base 10 conversion using SQL only
由於評論這個答案,我加入一個例子:
該函數將基地10號碼到由字母組成的基地。
create or replace
function basen(n10 in number, letters in varchar2) return varchar2 as
s varchar2(1000);
len number := length(letters);
base10 number := n10;
begin
if len <= 0 then
return null;
end if;
loop
if base10 < len then
return substr(letters, base10+1, 1) || s;
end if;
s := substr(letters, mod(base10, len)+1,1) || s;
base10 := floor(base10/len);
end loop;
return s;
end baseN;
這個函數轉換從base10到base36:
create or replace function base36(n10 in number) return varchar2 as
begin
return basen(n10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
end base36;
用戶可以創建一個共同序列與適當的MINVALUE和MAXVALUE和在觸發使用的方法之一的上方,SQL等
此方法使用HEX格式的數字。
select to_char(seq.nextval, 'fm0XXXX')
from dual;
或者這更緊湊的方法使用的所有符號的ASCII碼33和122之間:
select num,
chr(33 + mod(floor(num/(90*90*90*90)), 90))||
chr(33 + mod(floor(num/(90*90*90)), 90))||
chr(33 + mod(floor(num/(90*90)),90))||
chr(33 + mod(floor(num/90),90))||
chr(33 + mod(num,90)) as x00000
from (select seq.nextval as num
from dual);
基本上,這是基於90號的表示。
- 1. 生成字符串的隨機序列
- 2. 從長字符串生成序列號
- 3. 從字符串生成隨機序列
- 4. 如何從字符串列表中生成字符串組合?
- 5. 生成列表字符串
- 6. 如何在C++中生成字符串序列
- 7. 生成的字符序列
- 8. 如何打印由Oracle生成的大型XML字符串?
- 9. Oracle序列沒有生成
- 10. 如何從Oracle中的字符串序列列中獲取值?
- 11. Oracle字符序列?
- 12. 生成字符串
- 13. 生成字符串
- 14. 生成字符串
- 15. C#生成下一個字母數字字符串序列
- 16. 如何從字符串列中生成Categorical的熊貓DataFrame列?
- 17. 字符串和字符串生成器
- 18. 如何爲字符串生成GUID?
- 19. 如何生成唯一的字符串
- 20. 如何從字符串生成流?
- 21. 如何生成唯一字符串?
- 22. 如何生成JSON字符串數組?
- 23. CSHARP如何生成/從字符串
- 24. 如何用#define生成字符串?
- 25. 如何從普通字符串中生成JSON字符串?
- 26. 如何分隔字符串生成器中的字符串?
- 27. 字符串生成器vs列表
- 28. 生成MD5散列字符串T-SQL
- 29. 從列表生成字符串
- 30. 使用字符串鍵生成列表?
您需要能夠表示多少個值?使用一個正常的序列,但存儲十六進制等價物將使您從100,000個值到1,048,756,但這可能仍然太低?使用26個字符將得到11,881,376個可能的值;包括數字會給60,466,176。但更復雜的是,轉換一個序列。 – 2014-10-17 11:35:51
爲什麼限制在5? (架構改變會讓imo更有意義)。另外,即使你堅持5限制,你需要多少個獨特的值?可能最好更改架構並使用數字或sys_guid。 – tbone 2014-10-17 13:26:51
5上的lemetation是因爲來自客戶端的準備休息API的文檔,我需要超過10億個對象。 – 2014-10-17 17:01:45