在 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 中生成字母数字序列的主要内容,如果未能解决你的问题,请参考以下文章

打开 PL/SQL 语句的引用器?

如何通过pl sql函数从表中生成列表?

oracle sql语句中,有没有能够将结果集中数字替换成汉字的函数?

从XML到Oracle PL / SQL环境中的路径列表

如何使用现有的Oracle序列在hibernate中生成id?

Oracle中的PLsql的符号解释大全