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

文章作者 100test 发表时间 2008:02:01 15:14:23
来源 100Test.Com百考试题网


以下内容包括:
  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.


相关文章


用UNIX的kill命令来终止Oracle的过程
使用ORACLE数据库时的WEB分页方法
在Oracle中实现数字进制转换完全版
SYBASE到ORACLE连接服务器的实现
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛