创建字母数字序列Oracle SQL

创建字母数字序列Oracle SQL,sql,oracle,Sql,Oracle,我需要为我的主键创建一个包含3个字符和4个数字的字母数字序列。我试过用谷歌搜索,但没有发现任何清晰或有用的东西 那么,如何在Oracle中创建一个包含3个字符和4个数字的字母数字序列呢?这种序列没有现成的支持。您可以使用Oracle表达式将数字序列转换为您所描述的内容。例如: select a || b || c || last_4 from ( SELECT ROWNUM rn, lpad(MOD (ROWNUM, 10000),4,'0') last_4, CHR

我需要为我的主键创建一个包含3个字符和4个数字的字母数字序列。我试过用谷歌搜索,但没有发现任何清晰或有用的东西


那么,如何在Oracle中创建一个包含3个字符和4个数字的字母数字序列呢?

这种序列没有现成的支持。您可以使用Oracle表达式将数字序列转换为您所描述的内容。例如:

select a || b || c || last_4 from (
SELECT ROWNUM rn,
       lpad(MOD (ROWNUM, 10000),4,'0') last_4,
       CHR (MOD (FLOOR (ROWNUM / 10000), 26) + ASCII ('A')) c,
       CHR (MOD (FLOOR (ROWNUM / (10000 * 26)), 26) + ASCII ('A')) b,
       CHR (MOD (FLOOR (ROWNUM / (10000 * 26 * 26)), 26 * 26) + ASCII ('A')) a
FROM   DUAL
CONNECT BY ROWNUM <= POWER (26, 3) * 10000
)

@mathguy的结论非常有效,你应该重新考虑这个要求。 无论如何,您可以使用简单的映射将数字转换为序列字符串

此查询使用序列并将其转换为所需格式:

select 
chr(ascii('A') + mod(FLOOR(FLOOR(FLOOR(my_seq.nextval/10000)/26)/26),26))||
chr(ascii('A') + mod(FLOOR(FLOOR(my_seq.nextval/10000)/26),26)) ||
chr(ascii('A') + mod(FLOOR(my_seq.nextval/10000),26) ) ||
to_char(mod(my_seq.nextval,10000),'FM0009')  seq
from dual;

如果你指的是严格意义上的序列,你不能。Oracle中的序列表示整数。同样奇怪的是,您需要系统生成的值,但对格式有非常具体的要求。你为什么有这样的要求?你应该往后推。此外,您的要求将序列中的值限制为英语字母表中的少量值,即26^3*10000。这也是系统生成PK的一个非常不寻常的限制。三个固定字符?如果不是,递增的模式是什么?e、 g.999999后面跟着A000000,最后是ZZ9999?然后呢?还有,哪个字母表;混合情况?请详细说明您的要求。1=AAA0001,2=AAA0002,1000=AAB0000吗?或者别的什么?请大家注意,这确实需要您设置一个从my_seq开始的序列。如果它是一个可以被调用的函数,这可能会更好。我想作者正在寻找一个在调用时生成的序列。这将一次生成所有序列,我认为可以存储和引用这些序列。但可能存在一些阻塞问题,从而导致检索重复序列。