h2 { margin-top: 0.46cm; margin-bottom: 0.46cm; direction: ltr; line-height: 173%; text-align: justify; page-break-inside: avoid }
h2.western { font-family: "Cambria", serif; font-size: 16pt }
h2.cjk { font-family: "宋体"; font-size: 16pt }
h2.ctl { font-size: 16pt }
h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; line-height: 241%; text-align: justify; page-break-inside: avoid }
h1.western { font-family: "Calibri", serif; font-size: 22pt }
p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify }

源代码

CREATE
OR REPLACE PACKAGE Base_Num_Change IS

--=============================================

--1.0
16进制转10进制

FUNCTION
Hex_To_Dec(p_Str VARCHAR2) RETURN NUMBER;

--1.1
16进制转8进制

FUNCTION
Hex_To_Oct(p_Str VARCHAR2) RETURN VARCHAR2;

--1.2
16进制转2进制

FUNCTION
Hex_To_Bin(p_Str VARCHAR2) RETURN VARCHAR2;

--2.0
10进制转16进制

FUNCTION
Dec_To_Hex(p_Dec NUMBER) RETURN VARCHAR2;

--2.1
10进制转8进制

FUNCTION
Dec_To_Oct(p_Dec NUMBER) RETURN VARCHAR2;

--2.2
10进制转2进制

FUNCTION
Dec_To_Bin(p_Dec NUMBER) RETURN VARCHAR2;

--3.0
8进制转16进制

FUNCTION
Oct_To_Hex(p_Str VARCHAR2) RETURN VARCHAR2;

--3.1
8进制转10进制

FUNCTION
Oct_To_Dec(p_Str VARCHAR2) RETURN NUMBER;

--3.2
8进制转2进制

FUNCTION
Oct_To_Bin(p_Str VARCHAR2) RETURN VARCHAR2;

--4.0
2进制转16进制

FUNCTION
Bin_To_Hex(p_Str VARCHAR2) RETURN VARCHAR2;

--4.1
2进制转10进制

FUNCTION
Bin_To_Dec(p_Str VARCHAR2) RETURN NUMBER;

--4.2
2进制转8进制

FUNCTION
Bin_To_Oct(p_Str VARCHAR2) RETURN VARCHAR2;

END
Base_Num_Change;

/

CREATE
OR REPLACE PACKAGE BODY Base_Num_Change IS

--=============================================

--1.0
16进制转10进制

FUNCTION
Hex_To_Dec(p_Str VARCHAR2) RETURN NUMBER AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(1);

p_Sub_Out
NUMBER(3);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
NUMBER(18) := 0;

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '0123456789ABCDEF') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为2进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Length(p_Str);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Substr(p_Sub_Str, 1, 1);

SELECT
Decode(p_Char,

'A',

10,

'B',

11,

'C',

12,

'D',

13,

'E',

14,

'F',

15,

To_Number(p_Char))

INTO
p_Sub_Out

FROM
Dual;

p_Sub_Str
:= Substr(p_Sub_Str, 2);

p_Out
:= p_Out * 16 + p_Sub_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Hex_To_Dec;

--1.1
16进制转8进制

FUNCTION
Hex_To_Oct(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

--得到基本数据

p_Out
:= Bin_To_Oct(Hex_To_Bin(p_Str));

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Hex_To_Oct;

--1.2
16进制转2进制

FUNCTION
Hex_To_Bin(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(1);

p_Sub_Out
VARCHAR2(4);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '0123456789ABCDEF') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为2进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Length(p_Str);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Substr(p_Sub_Str, 1, 1);

SELECT
Decode(p_Char,

'0',

'0000',

'1',

'0001',

'2',

'0010',

'3',

'0011',

'4',

'0100',

'5',

'0101',

'6',

'0110',

'7',

'0111',

'8',

'1000',

'9',

'1001',

'A',

'1010',

'B',

'1011',

'C',

'1100',

'D',

'1101',

'E',

'1110',

'F',

'1111',

'2222')

INTO
p_Sub_Out

FROM
Dual;

p_Sub_Str
:= Substr(p_Sub_Str, 2);

p_Out
:= p_Out || p_Sub_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Hex_To_Bin;

--2.0
10进制转16进制

FUNCTION
Dec_To_Hex(p_Dec NUMBER) RETURN VARCHAR2 AS

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

--得到基本数据

p_Out
:= Bin_To_Hex(Dec_To_Bin(p_Dec));

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Dec_To_Hex;

--2.1
10进制转8进制

FUNCTION
Dec_To_Oct(p_Dec NUMBER) RETURN VARCHAR2 AS

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

--得到基本数据

p_Out
:= Bin_To_Oct(Dec_To_Bin(p_Dec));

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Dec_To_Oct;

--2.2
10进制转2进制

FUNCTION
Dec_To_Bin(p_Dec NUMBER) RETURN VARCHAR2 AS

p_Sub_Out
VARCHAR2(4);

p_Sub_Dec
NUMBER(18) := p_Dec;

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Dec IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Trunc(p_Dec) <> p_Dec

THEN

p_Errstr
:= p_Dec || '不是整数,无法转换为2进制!';

RAISE
p_Integrity;

END
IF;

LOOP

p_Sub_Out
:= MOD(p_Sub_Dec, 2);

p_Sub_Dec
:= Trunc(p_Sub_Dec / 2);

p_Out
:= p_Sub_Out || p_Out;

EXIT
WHEN(p_Sub_Dec = 0);

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Dec_To_Bin;

--3.0
8进制转16进制

FUNCTION
Oct_To_Hex(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

--得到基本数据

p_Out
:= Bin_To_Hex(Oct_To_Bin(p_Str));

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Oct_To_Hex;

--3.1
8进制转10进制

FUNCTION
Oct_To_Dec(p_Str VARCHAR2) RETURN NUMBER AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(1);

p_Sub_Out
NUMBER(3);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
NUMBER(18) := 0;

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '01234567') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为2进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Length(p_Str);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Substr(p_Sub_Str, 1, 1);

p_Sub_Out
:= To_Number(p_Char);

p_Sub_Str
:= Substr(p_Sub_Str, 2);

p_Out
:= p_Out * 8 + p_Sub_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Oct_To_Dec;

--3.2
8进制转2进制

FUNCTION
Oct_To_Bin(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(1);

p_Sub_Out
VARCHAR2(4);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '01234567') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为2进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Length(p_Str);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Substr(p_Sub_Str, 1, 1);

SELECT
Decode(p_Char,

'0',

'000',

'1',

'001',

'2',

'010',

'3',

'011',

'4',

'100',

'5',

'101',

'6',

'110',

'7',

'111',

'222')

INTO
p_Sub_Out

FROM
Dual;

p_Sub_Str
:= Substr(p_Sub_Str, 2);

p_Out
:= p_Out || p_Sub_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Oct_To_Bin;

--4.0
2进制转16进制

FUNCTION
Bin_To_Hex(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(4);

p_Sub_Out
VARCHAR2(4);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '01') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为16进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Ceil(Length(p_Str) / 4);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Lpad(Substr(p_Sub_Str,(CASE WHEN Length(p_Str) + 1 - 4 * i >
1 THEN Length(p_Str) + 1 - 4 * i ELSE 1 END)), 4, '0');

SELECT
Decode(p_Char,

'0000',

'0',

'0001',

'1',

'0010',

'2',

'0011',

'3',

'0100',

'4',

'0101',

'5',

'0110',

'6',

'0111',

'7',

'1000',

'8',

'1001',

'9',

'1010',

'A',

'1011',

'B',

'1100',

'C',

'1101',

'D',

'1110',

'E',

'1111',

'F',

'G')

INTO
p_Sub_Out

FROM
Dual;

p_Sub_Str
:= Substr(p_Sub_Str, 1, Length(p_Sub_Str) - 4);

p_Out
:= p_Sub_Out || p_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Bin_To_Hex;

--4.1
2进制转10进制

FUNCTION
Bin_To_Dec(p_Str VARCHAR2) RETURN NUMBER AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(1);

p_Sub_Out
NUMBER(3);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
NUMBER(18) := 0;

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '01') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为10进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Length(p_Str);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Substr(p_Sub_Str, 1, 1);

p_Sub_Out
:= To_Number(p_Char);

p_Sub_Str
:= Substr(p_Sub_Str, 2);

p_Out
:= p_Out * 2 + p_Sub_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Bin_To_Dec;

--4.2
2进制转8进制

FUNCTION
Bin_To_Oct(p_Str VARCHAR2) RETURN VARCHAR2 AS

p_Len
NUMBER(9);

p_Char
VARCHAR2(3);

p_Sub_Out
VARCHAR2(4);

p_Sub_Str
VARCHAR2(200) := Upper(p_Str);

p_Out
VARCHAR2(2000);

p_Integrity
EXCEPTION;

p_Errstr
VARCHAR2(200);

BEGIN

IF
p_Str IS NULL

THEN

RETURN
NULL;

END
IF;

IF
Ltrim(p_Sub_Str, '01') IS NOT NULL

THEN

p_Errstr
:= p_Str || '包含非法字符,无法转换为8进制!';

RAISE
p_Integrity;

END
IF;

--得到基本数据

p_Len
:= Ceil(Length(p_Str) / 3);

FOR
i IN 1 .. p_Len

LOOP

p_Char
:= Lpad(Substr(p_Sub_Str,(CASE WHEN Length(p_Str) + 1 - 3 * i >
1 THEN Length(p_Str) + 1 - 3 * i ELSE 1 END)), 3, '0');

SELECT
Decode(p_Char,

'000',

'0',

'001',

'1',

'010',

'2',

'011',

'3',

'100',

'4',

'101',

'5',

'110',

'6',

'111',

'7',

'9')

INTO
p_Sub_Out

FROM
Dual;

p_Sub_Str
:= Substr(p_Sub_Str, 1, Length(p_Sub_Str) - 3);

p_Out
:= p_Sub_Out || p_Out;

END
LOOP;

--

RETURN
p_Out;

EXCEPTION

WHEN
p_Integrity THEN

Raise_Application_Error(-20001,
p_Errstr);

END
Bin_To_Oct;

END
Base_Num_Change;

/

16进制转10进制

SQL>
select Base_Num_Change.Hex_To_Dec('ABC') from dual;

BASE_NUM_CHANGE.HEX_TO_DEC('ABC')

---------------------------------

2748

10进制转2进制

SQL>
select Base_Num_Change.Dec_To_Bin(2748) from dual;

BASE_NUM_CHANGE.DEC_TO_BIN(2748)

-------------------------------------------------------------------------------------------------

101010111100

2进制转10进制

SQL>
select Base_Num_Change.Bin_To_Dec(101010111100) from dual;

BASE_NUM_CHANGE.BIN_TO_DEC(101010111100)

----------------------------------------

2748

2进制转16进制

SQL>
select Base_Num_Change.Bin_To_Hex(101010111100) from dual;

BASE_NUM_CHANGE.BIN_TO_HEX(101010111100)

-------------------------------------------------------------------------------------------------

ABC

其实,Oracle自带函数
to_number(),就可以搞定

SQL>
select to_number('ABC','XXX') from dual;

TO_NUMBER('ABC','XXX')

2748

10进制转16进制

SQL>
select Base_Num_Change.Dec_To_Hex(2748) from dual;

BASE_NUM_CHANGE.DEC_TO_HEX(2748)

-------------------------------------------------------------------------------------------------

ABC

其实,Oracle自带to_char()函数

SQL>
select to_char('2748','XXX') from dual;

TO_C

----

ABC

16进制转2进制

SQL>
select Base_Num_Change.Hex_To_Bin('ABC') from dual;

BASE_NUM_CHANGE.HEX_TO_BIN('ABC')

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

101010111100

oracle进制转换的更多相关文章

  1. Oracle 中的进制转换

    Oracle 中的进制转换 */--> Oracle 中的进制转换 Table of Contents 1. 进制名 2. 10进制与16进制互相转换 2.1. 10进制转换为16进制 2.2. ...

  2. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  3. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  4. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...

  6. 结合stack数据结构,实现不同进制转换的算法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  7. 进制转换( C++字符数组 )

    注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...

  8. JS 进制转换

    十进制转换成其他进制 objectname.toString([radix])   objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...

  9. php的进制转换

    学习了php的进制转换,有很多的知识点,逻辑,也有最原始的笔算,但是我们还是习惯使用代码来实现进制的转换,进制的转换代码有如下:二进制(bin)八进制( oct)十进制( dec)十六进制( hex) ...

随机推荐

  1. [转载]DOS循环:bat/批处理for命令详解 (史上虽详尽的总结和说明~~)

    --本文来源于TTT BLOG: http://www.yoyotao.net/ttt/, 原文地址:http://www.yoyotao.net/ttt/post/139.html 前言: 虽然以前 ...

  2. opengl (1) 基本API的熟悉

    代码从此处下载 1 运行如下代码,可以看到如下效果,我们利用opengl画出一个三角形. void renderScene(void) { /* glClear清除缓冲区 */ glClear(GL_ ...

  3. Kooboo CMS 介绍

    Kooboo的定位是一个CMS,内容管理平台,从更严格意义上来说,它更应该网站快速开发平台.针对一般网站开发过程的分析和提炼,着重在解决网站的一般需求,提出一套快速开发网站的理念和方法.在这些理念和方 ...

  4. poj3101

    不难,结果: 程序: import java.math.*; import java.util.*; public class Main { public static void main(Strin ...

  5. 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误分析以及解决方案

    我的配置文件中是这样写的,<compilation debug="true" targetFramework="4.0"> 发布在iis上出现了 “ ...

  6. ScheduledExecutorFactoryBean忽略异常继续执行

    ScheduledExecutorFactoryBean忽略异常继续执行 程序中有一个定时任务,每10分钟把满足条件的任务从一个表迁移到另一张表,程序启动的时候数据库异常了一段时间,之后数据库恢复了. ...

  7. 用Quartus II 建立一个工程模板,以后新建工程时无需再配置参数

    以前用Quartus II 每次新建工程时,都要设置工程名,选择工程路径,选择芯片型号等等,好麻烦呀!可不可以建一个工程模板,以后新建工程时直接改相应文件名就可以呀!后来我一琢磨,感觉也不是不可以.因 ...

  8. HTML5终极备忘大全

    二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...

  9. 页面接口防刷 解决思路一nginx

    线上环境 很多接口 如果不做缓存 可能导致有人拿到url  每秒几万次的访问后台程序,导致系统down机. 此处, nginx可以加一层缓存. expires起到控制页面缓存的作用,合理的配置expi ...

  10. [Openstack][Grizzly] Mysql删除僵尸实例

    由于某些原因,导致在通过nova delete删除虚拟机后,其task_state 一致处于deleting状态, 但是始终无法删除.由于虚拟机还没有分配到节点等信息,还没有拷贝镜像,所以可以直接从数 ...