以下内容包括:
1)。提供两个进制转换包
2)。提供进制转换的一些简便方法
3)。提供进制转换的不同方法的性能评估
1。两个进制转换包
1)包PKG_DM_BASE_CONV(推荐)
CREATE OR REPLACE PACKAGE PKG_DM_BASE_CONV AS
FUNCTION hex_to_dec (hexnum IN char) RETURN NUMBER;
PRAGMA restrict_references (HEX_TO_DEC,WNDS);
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR2;
PRAGMA restrict_references (DEC_TO_HEX,WNDS);
FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (OCT_TO_DEC,WNDS);
FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2;
PRAGMA restrict_references (DEC_TO_OCT,WNDS);
FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (BIN_TO_DEC,WNDS);
FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2;
PRAGMA restrict_references (DEC_TO_BIN,WNDS);
FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER;
PRAGMA restrict_references (HEX_TO_BIN,WNDS);
FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2;
PRAGMA restrict_references (BIN_TO_HEX,WNDS);
FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (OCT_TO_BIN,WNDS);
FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (BIN_TO_OCT,WNDS);
FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2;
PRAGMA restrict_references (OCT_TO_HEX,WNDS);
FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER;
PRAGMA restrict_references (HEX_TO_OCT,WNDS);
--十六进制字符转换成ASCII码字符
FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR2;
PRAGMA restrict_references (raw_to_char,WNDS);
--ASCII码字符转换成十六进制字符
FUNCTION char_to_raw(v_char varchar2) RETURN LONG RAW;
PRAGMA restrict_references (char_to_raw,WNDS);
END PKG_DM_BASE_CONV;
/
CREATE OR REPLACE PACKAGE BODY PKG_DM_BASE_CONV AS
FUNCTION hex_to_dec (hexnum in char) RETURN NUMBER IS
i
NUMBER;
digits
NUMBER;
result
NUMBER := 0;
current_digit
char
(1);
current_digit_dec number;
BEGIN
digits := length(hexnum);
FOR i IN 1。
。
digits LOOP
current_digit := SUBSTR(hexnum, i, 1);
IF current_digit IN ('A','B','C','D','E','F') THEN
current_digit_dec := ascii(current_digit) - ascii('A') + 10;
ELSE
current_digit_dec := to_number(current_digit);
END IF;
result := (result * 16) + current_digit_dec;
END LOOP;
RETURN result;
END hex_to_dec;
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR2 IS
H VARCHAR2(64) :=';
N2 INTEGER
:= N;
BEGIN
LOOP
SELECT rawtohex(chr(N2))||H
INTO H
FROM dual;。
全部