在 Oracle PL/SQL 中生成字母数字序列
Posted
技术标签:
【中文标题】在 Oracle PL/SQL 中生成字母数字序列【英文标题】:Generate AlphaNumeric Sequence in Oracle PL/SQL 【发布时间】:2020-02-18 15:39:00 【问题描述】:大家好,我想为唯一主键创建一个序列,它应该从 0000 开始并以 1 递增,例如 0001、0002。当数字字符以 9 结束时,下一个值应该是 000A,下一个值应该是 000B 000Z,那么下一个应该是 0010(0011、0012 等等)。我对甲骨文真的很陌生,我真的不明白如何做到这一点,谁能给我一个启发?谢谢!
【问题讨论】:
为什么必须是字母数字?如果序列值只是为了提供一个PK,那么只需使用一个plain-old-sequence 对象,并在其上调用nextval。滚动您自己的序列有其自身的问题,例如来自多个会话的并发访问/生成。我认为你不需要按照你的要求去做。 看看这个:community.oracle.com/thread/3926021?start=15&tstart=0 【参考方案1】:知道了:
CREATE OR REPLACE FUNCTION GENERA_ALFANUM (N INTEGER) RETURN VARCHAR2
IS
Q INTEGER;
R VARCHAR2(4);
BEGIN
Q := N;
WHILE Q >= 36 LOOP
R := CHR(MOD(Q,36)+CASE WHEN MOD(Q,36) < 10 THEN 48 ELSE 55 END) || R;
Q := FLOOR(Q/36);
END LOOP;
R := CHR(MOD(Q,36)+CASE WHEN MOD(Q,36) < 10 THEN 48 ELSE 55 END) || R;
RETURN LPAD(R,4,'0');
END;
【讨论】:
以上是关于在 Oracle PL/SQL 中生成字母数字序列的主要内容,如果未能解决你的问题,请参考以下文章
oracle sql语句中,有没有能够将结果集中数字替换成汉字的函数?