oracle中如何转换成数字,如何在Oracle中实现数字进制转换完全版?

以下内容包括:

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;。

全部