在编写ctm脚本的时候需要用到10进制于36进制的互相转换。
36进制转10进制在shell中非常好实现。
echo $((36#00006sx1)) 就能将00006sx1转为317413 ,
但是10进制转36进制就没这么方便了,写了一个函数来进行转换。
create or replace function f_10to36(i int) return varchar is
ret varchar2(8);
var_m int;
var_s int;
begin
ret := ”;
var_s := i;
while var_s >= 36 loop
var_m := mod(var_s, 36);
if var_m < 10 then
ret := to_char(var_m) || ret;
else
ret := chr(var_m – 10 + 97) || ret;
end if;
var_s := trunc(var_s / 36);
end loop;
if var_s > 0 or (var_s = 0 and ret = ”) then
if var_s < 10 then
ret := to_char(var_s) || ret;
else
ret := chr(var_s – 10 + 97) || ret;
end if;
end if;
return lpad(ret, 8, ‘0’);
end f_10to36;