2017-01-16 78 views
0

我想要一列保存客戶唯一密鑰,由數字+字符組成,並按升序排列。 是否有可能以某種方式指示Oracle生成多條記錄,從1A到1Z,然後2A至2Z,等等,直到300000z:Oracle - 生成包含字母數字和字符升序的記錄

CUSTOMER_NUM 
------------ 
10a 

10b 

10c 

. 

. 

10z 

11a 

11b 

. 

最佳我迄今達成是這樣的:

select ROUND(DBMS_RANDOM.VALUE(9,21)), dbms_random.string('l', 1) from dual; 

任何人有任何想法嗎?我想生成至少有300000條記錄的測試表。

謝謝!

+0

爲什麼你想要那個?一個很大的NUMBER不會佔用更多的字節,而是使用更少的字節。 –

回答

0

下面的查詢應該給你想要的結果。

WITH 
TABLE1 AS (SELECT LEVEL PART_1 FROM DUAL CONNECT BY LEVEL <= 300000), 
TABLE2 AS (SELECT CHR(LEVEL+96) AS PART_2 FROM DUAL CONNECT BY LEVEL <27) 
SELECT PART_1||PART_2 AS KEY_ID FROM TABLE1,TABLE2 
+0

這似乎與Wernfried Domscheit的回答非常相似 – Aleksej

+0

地獄,感謝您的快速和偉大的迴應!我想我需要澄清一點,我有一個已經存在的列,所以我需要用所有上面的條目填充它。如何通過INSERT命令跨越它? – LordWriter

+0

如果你已經在數據庫中有300000行,你需要更新它們,如果你沒有任何表中的行,那麼你可以使用INSERT INTO YOUR_TABLE SELECT * FROM(上面的查詢在這裏)' –

0

您可能需要類似以下內容:

select alpha || num 
from 
(select substr('qwertyuiopasdfghjklzxcvbnm', level, 1) as alpha from dual connect by level <= 26) 
cross join 
(select level as num from dual connect by level <= 2) 
order by num, alpha 

第一個查詢使用一個包含所有字符的字符串,並將其分成包含單個字符26行。

第二個查詢生成給定數量的數字以加入字符。

0

你可以試試這個:

WITH n AS 
    (SELECT LEVEL AS Num FROM dual CONNECT BY LEVEL < 10), 
c AS 
    (SELECT CHR(LEVEL + 96) AS alpha FROM dual CONNECT BY LEVEL <= 26) 
SELECT num||alpha 
FROM n 
    CROSS JOIN c; 
相關問題