现有一个6位字符串,每一位取值从0-9,A-Z 共可以取 36的6次方。
现在我想做一个方法来实现这个功能,每次加一
例如0000->0001...->0009->000A...000Z->0010->...->ZZZZ
看上去是个36进制的问题,我想用pl/sql写,不知道应该怎么写。
现在我想做一个方法来实现这个功能,每次加一
例如0000->0001...->0009->000A...000Z->0010->...->ZZZZ
看上去是个36进制的问题,我想用pl/sql写,不知道应该怎么写。
2 as
3 vtemp number;
4 vout varchar2(20);
5 c varchar2(10);
6 begin
7 vtemp:=vin;
8 if vtemp<36 then
9 if vtemp<=9 then
10 return vtemp;
11 else
12 return chr(vtemp+55);
13 end if;
14 end if;
15 while vtemp>=36 loop
16 c:=mod(vtemp,36);
17 if c>9 then
18 c:=chr(c+55);
19 end if;
20 vout:=vout||c;
21 vtemp:=trunc(vtemp/36);
22 end loop;
23 return vtemp||vout;
24 end f_36;
25 /函数已创建。已用时间: 00: 00: 00.70
SQL> select f_36(rownum) from tt;F_36(ROWNUM)
--------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
A
BF_36(ROWNUM)
--------------------------------------------------------------------
C
D
E
F
G
H
I
J
K
L
MF_36(ROWNUM)
--------------------------------------------------------------------
N
O
P
Q
R
S
T
U
V
W
XF_36(ROWNUM)
--------------------------------------------------------------------
Y
Z
10
11
12
13
14
15
16
17
18F_36(ROWNUM)
--------------------------------------------------------------------
19
1A
1B
1C
1D
1E
1F
1G
1H
1I
1JF_36(ROWNUM)
--------------------------------------------------------------------
1K
1L
1M
1N
1O
1P
1Q
1R
1S
1T
1UF_36(ROWNUM)
--------------------------------------------------------------------
1V
1W
1X
1Y
1Z
20
21
22
23
24
25F_36(ROWNUM)
--------------------------------------------------------------------
26
27
28
29
2A
2B
2C
2D
2E
2F
2G
:new.id:=f_36(seqname.nextval);
即可。
bzszp(SongZip)方法真好,思路清晰,
先建一个36进制的转换函数,进制的本质就是取整、取模运算的思想;
后通过建一个序列,很好的解决了并发的问题!学习收藏之...