FUNCTION GEN_NUMBER_10TO32(P_NUM NUMBER, P_LENGTH NUMBER) RETURN VARCHAR2 IS
L_RESULT VARCHAR2(20);
L_NUM NUMBER := P_NUM;
BEGIN
--若LENGTH为负数则返回'0',若为0则返回实际长度的三十二进制字符串
--若LENGTH大于0则返回长度为@length的三十二进制字符串(从低位起,位数不够高位补'0',超过位数则高位被截断)
L_RESULT := '';
IF L_NUM <= 0 OR P_LENGTH < 0 THEN
L_RESULT := '';
ELSE
WHILE L_NUM <> 0 LOOP
L_RESULT := SUBSTR('0123456789ABCDEFGHIJKLMNOPQRSTUV',
MOD(L_NUM, 32) + 1,
1) || L_RESULT;
L_NUM := TRUNC(L_NUM / 32);
END LOOP;
IF (LENGTH(L_RESULT) < P_LENGTH) THEN
L_RESULT := LPAD(L_RESULT, P_LENGTH, 0);
ELSE
L_RESULT := SUBSTR(L_RESULT, -P_LENGTH, P_LENGTH);
END IF;
END IF;
RETURN L_RESULT;
END GEN_NUMBER_10TO32;
L_RESULT VARCHAR2(20);
L_NUM NUMBER := P_NUM;
BEGIN
--若LENGTH为负数则返回'0',若为0则返回实际长度的三十二进制字符串
--若LENGTH大于0则返回长度为@length的三十二进制字符串(从低位起,位数不够高位补'0',超过位数则高位被截断)
L_RESULT := '';
IF L_NUM <= 0 OR P_LENGTH < 0 THEN
L_RESULT := '';
ELSE
WHILE L_NUM <> 0 LOOP
L_RESULT := SUBSTR('0123456789ABCDEFGHIJKLMNOPQRSTUV',
MOD(L_NUM, 32) + 1,
1) || L_RESULT;
L_NUM := TRUNC(L_NUM / 32);
END LOOP;
IF (LENGTH(L_RESULT) < P_LENGTH) THEN
L_RESULT := LPAD(L_RESULT, P_LENGTH, 0);
ELSE
L_RESULT := SUBSTR(L_RESULT, -P_LENGTH, P_LENGTH);
END IF;
END IF;
RETURN L_RESULT;
END GEN_NUMBER_10TO32;