知识大全 在Oracle中实现数字进制转换完全版

Posted 字符

篇首语:有志者自有千计万计,无志者只感千难万难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Oracle中实现数字进制转换完全版相关的知识,希望对你有一定的参考价值。

在Oracle中实现数字进制转换完全版  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  以下内容包括    ) 提供两个进制转换包    ) 提供进制转换的一些简便方法    ) 提供进制转换的不同方法的性能评估    两个进制转换包    )包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 VARCHAR ;   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 VARCHAR ;   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 VARCHAR ;   PRAGMA restrict_references (DEC_TO_BIN WNDS);      FUNCTION hex_to_bin (hexin IN VARCHAR ) RETURN NUMBER;   PRAGMA restrict_references (HEX_TO_BIN WNDS);      FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR ;   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 VARCHAR ;   PRAGMA restrict_references (OCT_TO_HEX WNDS);      FUNCTION hex_to_oct (hexin IN VARCHAR ) RETURN NUMBER;   PRAGMA restrict_references (HEX_TO_OCT WNDS);       十六进制字符转换成ASCII码字符   FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR ;   PRAGMA restrict_references (raw_to_char WNDS);       ASCII码字符转换成十六进制字符    FUNCTION char_to_raw(v_char varchar ) 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 := ;      current_digit   char( );      current_digit_dec number;   BEGIN      digits := length(hexnum);      FOR i IN digits LOOP        current_digit := SUBSTR(hexnum i );        IF current_digit IN ( A B C D E F ) THEN          current_digit_dec := ascii(current_digit) ascii( A ) + ;        ELSE          current_digit_dec := to_number(current_digit);        END IF;        result := (result * ) + current_digit_dec;      END LOOP;      RETURN result;   END hex_to_dec;      FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR IS      H VARCHAR ( ) := ;      N INTEGER   := N;   BEGIN      LOOP        SELECT rawtohex(chr(N ))||H         INTO H         FROM dual;           N := trunc(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 > LOOP   v_charval := SUBSTR(v_string v_charpos );   IF v_charval BEEEN AND THEN   v_return := v_return + TO_NUMBER(v_charval) * POWER( v_power);   ELSE   raise_application_error( Invalid input );   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 IS   v_decin NUMBER;   v_next_digit NUMBER;   v_result varchar( );   BEGIN   v_decin := decin;   WHILE v_decin > LOOP   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 > LOOP   v_charval := SUBSTR(v_string v_charpos );   IF v_charval BEEEN AND THEN   v_return := v_return + TO_NUMBER(v_charval) * POWER( v_power);   ELSE   raise_application_error( Invalid input );   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 IS   v_decin NUMBER;   v_next_digit NUMBER;   v_result varchar( );   BEGIN   v_decin := decin;   WHILE v_decin > LOOP   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 ) RETURN NUMBER IS   BEGIN   RETURN dec_to_bin(hex_to_dec(hexin));   END hex_to_bin;      FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR IS   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 IS   BEGIN   RETURN dec_to_hex(oct_to_dec(octin));   END oct_to_hex;      FUNCTION hex_to_oct (hexin IN VARCHAR ) RETURN NUMBER IS   BEGIN   RETURN dec_to_oct(hex_to_dec(hexin));   END hex_to_oct;      FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR IS      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 := i + ;       END LOOP;         RETURN rawparam;   END raw_to_char;          FUNCTION char_to_raw(v_char varchar ) RETURN LONG RAW IS      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 i )));        rawdata := rawdata || HEXTORAW(hex);        i := i + ;       END LOOP;         RETURN rawdata;        END;      END PKG_DM_BASE_CONV;   /     cha138/Article/program/Oracle/201311/18388

相关参考