Oracle中十进制与十六进制转换程序

 CREATE OR REPLACE PROCEDURE dec2hex (in_num IN NUMBER, out_hex OUT VARCHAR2)
  IS
    TYPE vc2tab_type IS TABLE OF VARCHAR2(1)
     INDEX BY BINARY_INTEGER;
  
    hextab            vc2tab_type;
    v_num             NUMBER;
    v_hex             VARCHAR2(200);
  
  /*
  Author: Jonas Nordstrom
  */
  BEGIN
    IF in_num IS NULL THEN RETURN NULL; END IF; 
  
    hextab (0) := '0';
    hextab (1) := '1';
    hextab (2) := '2';
    hextab (3) := '3';
    hextab (4) := '4';
    hextab (5) := '5';
    hextab (6) := '6';
    hextab (7) := '7';
    hextab (8) := '8';
    hextab (9) := '9';
    hextab (10) := 'A';
    hextab (11) := 'B';
    hextab (12) := 'C';
    hextab (13) := 'D';
    hextab (14) := 'E';
    hextab (15) := 'F';
    v_num := in_num;
  
    WHILE v_num >= 16
    LOOP
     v_hex := hextab (MOD (v_num, 16)) v_hex;
     v_num := TRUNC (v_num / 16);
    END LOOP;
  
    v_hex := hextab (MOD (v_num, 16)) v_hex;
    out_hex := v_hex;
  END;  -- dec2hex
  /
  
  CREATE OR REPLACE FUNCTION hextointeger (h VARCHAR2)
    RETURN PLS_INTEGER
  IS
  BEGIN
    IF NVL (LENGTH (h), 1) = 1
    THEN
     RETURN INSTR ('0123456789ABCDEF', h) - 1;
    ELSE
     RETURN 16 * hextointeger (SUBSTR (h, 1, LENGTH (h) - 1))
         INSTR ('0123456789ABCDEF', SUBSTR (h, -1)) -
         1;
    END IF;
  END hextointeger;
  /
  
  CREATE OR REPLACE FUNCTION integertohex (n pls_integer) 软件开发网
    RETURN VARCHAR2
  IS
  BEGIN
    IF n > 0
    THEN
     RETURN integertohex (TRUNC (n / 16))
         SUBSTR ('0123456789ABCDEF', MOD (n, 16) 1, 1);
    ELSE
     RETURN NULL;
    END IF;
  END integertohex;
  /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值