以下內容包括
CREATE OR REPLACE PACKAGE PKG_DM_BASE_CONV AS
FUNCTION hex_to_dec (hexnum IN char) RETURN NUMBER;
PRAGMA restrict_references (HEX_TO_DEC
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR
PRAGMA restrict_references (DEC_TO_HEX
FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (OCT_TO_DEC
FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR
PRAGMA restrict_references (DEC_TO_OCT
FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (BIN_TO_DEC
FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR
PRAGMA restrict_references (DEC_TO_BIN
FUNCTION hex_to_bin (hexin IN VARCHAR
PRAGMA restrict_references (HEX_TO_BIN
FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR
PRAGMA restrict_references (BIN_TO_HEX
FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (OCT_TO_BIN
FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER;
PRAGMA restrict_references (BIN_TO_OCT
FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR
PRAGMA restrict_references (OCT_TO_HEX
FUNCTION hex_to_oct (hexin IN VARCHAR
PRAGMA restrict_references (HEX_TO_OCT
FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR
PRAGMA restrict_references (raw_to_char
FUNCTION char_to_raw(v_char varchar
PRAGMA restrict_references (char_to_raw
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 :=
current_digit char(
current_digit_dec number;
BEGIN
digits := length(hexnum);
FOR i IN
current_digit := SUBSTR(hexnum
IF current_digit IN (
current_digit_dec := ascii(current_digit)
ELSE
current_digit_dec := to_number(current_digit);
END IF;
result := (result *
END LOOP;
RETURN result;
END hex_to_dec;
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR
H VARCHAR
N
BEGIN
LOOP
SELECT rawtohex(chr(N
INTO H
FROM dual;
N
EXIT WHEN N
END LOOP;
RETURN H;
END dec_to_hex;
FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER IS
v_charpos NUMBER;
v_charval CHAR(
v_return NUMBER DEFAULT
v_power NUMBER DEFAULT
v_string VARCHAR
BEGIN
v_string := TO_CHAR(octin);
v_charpos := LENGTH(v_string);
WHILE v_charpos >
v_charval := SUBSTR(v_string
IF v_charval BETWEEN
v_return := v_return + TO_NUMBER(v_charval) * POWER(
ELSE
raise_application_error(
END IF;
v_charpos := v_charpos
v_power := v_power +
END LOOP;
RETURN v_return;
END oct_to_dec;
FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR
v_decin NUMBER;
v_next_digit NUMBER;
v_result varchar(
BEGIN
v_decin := decin;
WHILE v_decin >
v_next_digit := mod(v_decin
v_result := to_char(v_next_digit) || v_result;
v_decin := floor(v_decin /
END LOOP;
RETURN v_result;
END dec_to_oct;
FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER IS
v_charpos NUMBER;
v_charval CHAR(
v_return NUMBER DEFAULT
v_power NUMBER DEFAULT
v_string VARCHAR
BEGIN
v_string := TO_CHAR(binin);
v_charpos := LENGTH(v_string);
WHILE v_charpos >
v_charval := SUBSTR(v_string
IF v_charval BETWEEN
v_return := v_return + TO_NUMBER(v_charval) * POWER(
ELSE
raise_application_error(
END IF;
v_charpos := v_charpos
v_power := v_power +
END LOOP;
RETURN v_return;
END bin_to_dec;
FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR
v_decin NUMBER;
v_next_digit NUMBER;
v_result varchar(
BEGIN
v_decin := decin;
WHILE v_decin >
v_next_digit := mod(v_decin
v_result := to_char(v_next_digit) || v_result;
v_decin := floor(v_decin /
END LOOP;
RETURN v_result;
END dec_to_bin;
FUNCTION hex_to_bin (hexin IN VARCHAR
BEGIN
RETURN dec_to_bin(hex_to_dec(hexin));
END hex_to_bin;
FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR
BEGIN
RETURN dec_to_hex(bin_to_dec(binin));
END bin_to_hex;
FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN dec_to_bin(oct_to_dec(octin));
END oct_to_bin;
FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN dec_to_oct(bin_to_dec(binin));
END bin_to_oct;
FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR
BEGIN
RETURN dec_to_hex(oct_to_dec(octin));
END oct_to_hex;
FUNCTION hex_to_oct (hexin IN VARCHAR
BEGIN
RETURN dec_to_oct(hex_to_dec(hexin));
END hex_to_oct;
FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR
rawlen NUMBER;
hex VARCHAR
rawparam VARCHAR
i NUMBER;
BEGIN
hex := rawtohex(v_raw);
rawlen := length(hex);
i :=
WHILE i <= rawlen
LOOP
rawparam := rawparam||CHR(hex_to_dec(substrb(hex
i := i +
END LOOP;
RETURN rawparam;
END raw_to_char;
FUNCTION char_to_raw(v_char varchar
rawdata LONG RAW;
rawlen NUMBER;
hex VARCHAR
i NUMBER;
BEGIN
rawlen := length(v_char);
i :=
WHILE i <= rawlen
LOOP
hex := dec_to_hex(ascii(substrb(v_char
rawdata := rawdata || HEXTORAW(hex);
i := i +
END LOOP;
RETURN rawdata;
END;
END PKG_DM_BASE_CONV;
/
From:http://tw.wingwit.com/Article/program/Oracle/201311/18388.html