当前位置:我的异常网» 数据库 » oracle 进制其间转换

oracle 进制其间转换

www.myexceptions.net  网友分享于:2013-10-06  浏览:2次

oracle 进制之间转换

CREATE OR REPLACE TYPE type_str_agg AS OBJECT

(

total VARCHAR2(4000),

STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)

RETURN NUMBER,

MEMBER FUNCTION odciaggregateiterate

(

SELF  IN OUT type_str_agg,

VALUE IN VARCHAR2

) RETURN NUMBER,

MEMBER FUNCTION odciaggregateterminate

(

SELF        IN type_str_agg,

returnvalue OUT VARCHAR2,

flags       IN NUMBER

) RETURN NUMBER,

MEMBER FUNCTION odciaggregatemerge

(

SELF IN OUT type_str_agg,

ctx2 IN type_str_agg

) RETURN NUMBER

)

/

CREATE OR REPLACE TYPE BODY type_str_agg IS

STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)

RETURN NUMBER IS

BEGIN

sctx := type_str_agg(NULL);

RETURN odciconst.success;

END;

MEMBER FUNCTION odciaggregateiterate

(

SELF  IN OUT type_str_agg,

VALUE IN VARCHAR2

) RETURN NUMBER IS

BEGIN

SELF.total := SELF.total || VALUE;

RETURN odciconst.success;

END;

MEMBER FUNCTION odciaggregateterminate

(

SELF        IN type_str_agg,

returnvalue OUT VARCHAR2,

flags       IN NUMBER

) RETURN NUMBER IS

BEGIN

returnvalue := SELF.total;

RETURN odciconst.success;

END;

MEMBER FUNCTION odciaggregatemerge

(

SELF IN OUT type_str_agg,

ctx2 IN type_str_agg

) RETURN NUMBER IS

BEGIN

SELF.total := SELF.total || ctx2.total;

RETURN odciconst.success;

END;

END;

/

CREATE OR REPLACE FUNCTION f_stragg(p_input VARCHAR2) RETURN VARCHAR2

PARALLEL_ENABLE

AGGREGATE USING type_str_agg;

/

CREATE OR REPLACE PACKAGE pkg_number_trans IS

FUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2;

FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2;

END pkg_number_trans;

/

CREATE OR REPLACE PACKAGE BODY pkg_number_trans IS

FUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_bin_to_oct

-- 对象描述: 二进制转换八进制

-- 输入参数: p_str 二进制字符串

-- 返回结果: 八进制字符串

-- 测试用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;

-- 备    注: 需要定义f_stragg函数和type_str_agg类型

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

v_return VARCHAR2(4000);

v_bin    VARCHAR2(4000);

BEGIN

v_bin := substr('00' || p_str, -3 * ceil(length(p_str) / 3));

SELECT f_stragg(data1) INTO v_return

FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))

WHEN '000' THEN '0'

WHEN '001' THEN '1'

WHEN '010' THEN '2'

WHEN '011' THEN '3'

WHEN '100' THEN '4'

WHEN '101' THEN '5'

WHEN '110' THEN '6'

WHEN '111' THEN '7'

END) data1

FROM dual

CONNECT BY rownum <= length(v_bin) / 3);

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_bin_to_oct;

FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_bin_to_dec

-- 对象描述: 二进制转换十进制

-- 输入参数: p_str 二进制字符串

-- 返回结果: 十进制字符串

-- 测试用例: SELECT pkg_number_trans.f_bin_to_dec('11110001010') FROM dual;

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

v_return  VARCHAR2(4000);

BEGIN

SELECT SUM(data1) INTO v_return

FROM (SELECT substr(p_str, rownum, 1) * power(2, length(p_str) - rownum) data1

FROM dual

CONNECT BY rownum <= length(p_str));

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_bin_to_dec;

FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_bin_to_hex

-- 对象描述: 二进制转换十六进制

-- 输入参数: p_str 二进制字符串

-- 返回结果: 十六进制字符串

-- 测试用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;

-- 备    注: 需要定义f_stragg函数和type_str_agg类型

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

v_return VARCHAR2(4000);

v_bin    VARCHAR2(4000);

BEGIN

v_bin := substr('000' || p_str, -4 * ceil(length(p_str) / 4));

SELECT f_stragg(data1) INTO v_return

FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 4 + 1, 4))

WHEN '0000' THEN '0'

WHEN '0001' THEN '1'

WHEN '0010' THEN '2'

WHEN '0011' THEN '3'

WHEN '0100' THEN '4'

WHEN '0101' THEN '5'

WHEN '0110' THEN '6'

WHEN '0111' THEN '7'

WHEN '1000' THEN '8'

WHEN '1001' THEN '9'

WHEN '1010' THEN 'A'

WHEN '1011' THEN 'B'

WHEN '1100' THEN 'C'

WHEN '1101' THEN 'D'

WHEN '1110' THEN 'E'

WHEN '1111' THEN 'F'

END) data1

FROM dual

CONNECT BY rownum <= length(v_bin) / 4);

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_bin_to_hex;

FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_oct_to_bin

-- 对象描述: 八进制转换二进制

-- 输入参数: p_str 八进制字符串

-- 返回结果: 二进制字符串

-- 测试用例: SELECT pkg_number_trans.f_oct_to_bin('3612') FROM dual;

-- 备    注: 需要定义f_stragg函数和type_str_agg类型

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

v_return VARCHAR2(4000);

BEGIN

SELECT to_char(to_number(f_stragg(data1))) INTO v_return

FROM (SELECT (CASE upper(substr(p_str, rownum, 1))

WHEN '0' THEN '000'

WHEN '1' THEN '001'

WHEN '2' THEN '010'

WHEN '3' THEN '011'

WHEN '4' THEN '100'

WHEN '5' THEN '101'

WHEN '6' THEN '110'

WHEN '7' THEN '111'

END) data1

FROM dual

CONNECT BY rownum <= length(p_str));

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_oct_to_bin;

FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_oct_to_dec

-- 对象描述: 八进制转换十进制

-- 输入参数: p_str 八进制字符串

-- 返回结果: 十进制字符串

-- 测试用例: SELECT pkg_number_trans.f_oct_to_dec('3612') FROM dual;

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

v_return  VARCHAR2(4000);

BEGIN

SELECT SUM(data1) INTO v_return

FROM (SELECT substr(p_str, rownum, 1) * power(8, length(p_str) - rownum) data1

FROM dual

CONNECT BY rownum <= length(p_str));

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_oct_to_dec;

FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_oct_to_bin

-- 对象描述: 八进制转换十六进制

-- 输入参数: p_str 八进制字符串

-- 返回结果: 十六进制字符串

-- 测试用例: SELECT pkg_number_trans.f_oct_to_hex('3612') FROM dual;

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

v_return VARCHAR2(4000);

v_bin    VARCHAR2(4000);

BEGIN

SELECT pkg_number_trans.f_oct_to_bin(p_str) INTO v_bin FROM dual;

SELECT pkg_number_trans.f_bin_to_hex(v_bin) INTO v_return FROM dual;

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_oct_to_hex;

FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_dec_to_bin

-- 对象描述: 十进制转换二进制

-- 输入参数: p_str 十进制字符串

-- 返回结果: 二进制字符串

-- 测试用例: SELECT pkg_number_trans.f_dec_to_bin('1930') FROM dual;

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

v_return VARCHAR2(4000);

v_hex    VARCHAR2(4000);

BEGIN

SELECT pkg_number_trans.f_dec_to_hex(p_int) INTO v_hex FROM dual;

SELECT pkg_number_trans.f_hex_to_bin(v_hex) INTO v_return FROM dual;

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_dec_to_bin;

FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_dec_to_oct

-- 对象描述: 十进制转换八进制

-- 输入参数: p_str 十进制字符串

-- 返回结果: 八进制字符串

-- 测试用例: SELECT pkg_number_trans.f_dec_to_oct('1930') FROM dual;

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

v_return VARCHAR2(4000);

v_bin    VARCHAR2(4000);

BEGIN

SELECT pkg_number_trans.f_dec_to_bin(p_int) INTO v_bin FROM dual;

v_bin := substr('00' || v_bin, -3 * ceil(length(v_bin) / 3));

SELECT f_stragg(data1) INTO v_return

FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))

WHEN '000' THEN '0'

WHEN '001' THEN '1'

WHEN '010' THEN '2'

WHEN '011' THEN '3'

WHEN '100' THEN '4'

WHEN '101' THEN '5'

WHEN '110' THEN '6'

WHEN '111' THEN '7'

END) data1

FROM dual

CONNECT BY rownum <= length(v_bin) / 3);

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_dec_to_oct;

FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_dec_to_oct

-- 对象描述: 十进制转换十六进制

-- 输入参数: p_str 十进制字符串

-- 返回结果: 十六进制字符串

-- 测试用例: SELECT pkg_number_trans.f_dec_to_hex('1930') FROM dual;

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

v_return VARCHAR2(4000);

BEGIN

SELECT upper(TRIM(to_char(p_int, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) INTO v_return FROM dual;

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_dec_to_hex;

FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_dec_to_oct

-- 对象描述: 十六进制转换二进制

-- 输入参数: p_str 十六进制字符串

-- 返回结果: 二进制字符串

-- 测试用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;

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

v_return VARCHAR2(4000);

BEGIN

SELECT to_char(to_number(f_stragg(data1))) INTO v_return

FROM (SELECT (CASE upper(substr(p_str, rownum, 1))

WHEN '0' THEN '0000'

WHEN '1' THEN '0001'

WHEN '2' THEN '0010'

WHEN '3' THEN '0011'

WHEN '4' THEN '0100'

WHEN '5' THEN '0101'

WHEN '6' THEN '0110'

WHEN '7' THEN '0111'

WHEN '8' THEN '1000'

WHEN '9' THEN '1001'

WHEN 'A' THEN '1010'

WHEN 'B' THEN '1011'

WHEN 'C' THEN '1100'

WHEN 'D' THEN '1101'

WHEN 'E' THEN '1110'

WHEN 'F' THEN '1111'

END) data1

FROM dual

CONNECT BY rownum <= length(p_str));

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_hex_to_bin;

FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_dec_to_oct

-- 对象描述: 十六进制转换八进制

-- 输入参数: p_str 十六进制字符串

-- 返回结果: 八进制字符串

-- 测试用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;

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

v_return VARCHAR2(4000);

v_bin    VARCHAR2(4000);

BEGIN

SELECT pkg_number_trans.f_hex_to_bin(p_str) INTO v_bin FROM dual;

SELECT pkg_number_trans.f_bin_to_oct(v_bin) INTO v_return FROM dual;

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_hex_to_oct;

FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS

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

-- 对象名称: f_hex_to_dec

-- 对象描述: 十六进制转换十进制

-- 输入参数: p_str 十六进制字符串

-- 返回结果: 十进制字符串

-- 测试用例: SELECT pkg_number_trans.f_hex_to_dec('78A') FROM dual;

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

v_return  VARCHAR2(4000);

BEGIN

SELECT SUM(data1) INTO v_return

FROM (SELECT (CASE upper(substr(p_str, rownum, 1))

WHEN 'A' THEN '10'

WHEN 'B' THEN '11'

WHEN 'C' THEN '12'

WHEN 'D' THEN '13'

WHEN 'E' THEN '14'

WHEN 'F' THEN '15'

ELSE substr(p_str, rownum, 1)

END) * power(16, length(p_str) - rownum) data1

FROM dual

CONNECT BY rownum <= length(p_str));

RETURN v_return;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END f_hex_to_dec;

END pkg_number_trans;

/

文章评论

转换成12进制 oracle,oracle 进制其间转换相关推荐

  1. C++24小时制转换成12小时制

    英文题目(老师给的原版题目): Write a program that converts from 24-hour notation to 12-hour notation.For example, ...

  2. 将pdf转换html_pdf文件怎么转换成html网页格式?用什么方法来转换?

    pdf转换成html已经是日常工作很常见的需求了,如果你还在手动转换,不仅耗时间而且又不准确这样我们的效率往往会最低,掌握快速将pdf文件转html网页的巧妙方法可以大大提高我们的工作效率这样我们就可 ...

  3. OFD文件怎么转换成图片?这两种方法能够快速转换

    怎么将OFD文件转换成图片呢?OFD文件是我们国家自主研发的一种文件版式格式标准,大家对于这种受用面较小的文件格式见到的次数可能不多,因此也对这种格式的文件不太了解,打开它需要相关的OFD阅读软件才可 ...

  4. 输入一个字符,判断其是否为大写字母,如果是,将他转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

    输入一个字符,判断其是否为大写字母,如果是,将他转换成小写字母:如果不是,不转换.然后输出最后得到的字符. 代码如下: 1 #include<stdio.h>2 int main()3 { ...

  5. ​Excel如何转换成Word文档?教你如何实现转换

    怎么把excel表格转换成word文档呢?对文件的格式转换相信大家都经历过很多次了,很多时候都是我们在工作中的办公需求.最近有看到有很多小伙伴想了解怎么把excel表格转换成word文档,对于这个比较 ...

  6. CAJ文件转换成PDF文件:教你如何实现文件格式转换

    CAJ文件是中国知网常用的一种文献格式,但有时候我们需要将其转换成PDF格式,以方便阅读.打印.分享等用途.本文将教你如何实现CAJ文件转换成PDF文件. 方法一.使用CAJViewer软件 步骤1: ...

  7. c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...

    C 语言进制之间的转换 二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位 ...

  8. 小数转换成二进制c语言,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define NUM 2 #define ZERO 0.000001 int PrnMainMen ...

  9. cdr怎么转换成psd转换为位图标准_动漫角色转换真人,飞屋环游记中的小罗竟酷似他……...

    机器之心报道 机器之心编辑部 电影<超人总动员>中的巴小飞和<飞屋环游记>中的小罗都是大家熟悉且喜欢的角色.但你有没有想过,这些动漫角色的「真人」版会是什么样子--这项研究将告 ...

最新文章

  1. SPFA-DFS P3385 模板 判断负环===vector为啥过不了?
  2. 电脑很卡反应很慢该如何处理_我的苹果电脑中毒了,好开心
  3. java怎么看提示错误,Mabatis错误提示Parameter index out of range的处理方法
  4. javascript正则表达式验证IP,URL
  5. Cannot attach the file as database 'membership'.
  6. 某大型银行深化系统技术方案之十一:核心层之业务活动监控
  7. jstorm mysql_Jstorm+Spring+mybatis整合
  8. matlab之在坐标区上添加图例函数legend
  9. 系统之家启动维护光盘v3.0[小盘·贺岁篇]
  10. 008--【SpringBoot】过滤器,拦截器,切面
  11. 用Node.js实现一个HTTP服务器程序(文件服务器)
  12. 全国计算机等级考试二级web,全国计算机等级考试二级web大纲
  13. 关于windows的共享文件夹的添加与删除(内网传输必备技能)[win10与win7设置区别]
  14. 2019年数字IC校招薪酬火爆出炉,你被倒挂了吗_
  15. ios11修改微信步数_iOS逆向之“修改微信运动步数”
  16. 【Qt】通过QtCreator源码学习Qt(十二):Q_D和Q_Q指针(简称“d指针”)详解
  17. GPRS的工作原理、主要特点(转自aerkate)
  18. 详解操作系统之进程间通信 IPC (InterProcess Communication)
  19. 敏捷开发中如何写好用户故事?
  20. java在各大领域应用现状及未来

热门文章

  1. 皮一皮:老板是个学渣...
  2. 详解模板注入漏洞(下)
  3. 如何利用 Arthas 热更新线上代码
  4. 系统设计经典题:手把手教你搭建一个IM(即时通讯) 系统
  5. Spring干货汇总(含Spring Boot与Spring Cloud)
  6. 如何用PHP写商品折扣_秒杀抢购时的超发,你用php如何优化的
  7. html轮播图速度加快,各位老师,为什么我用jq写的轮播图,移入移出速度会加快...
  8. Mybatis问题解释?
  9. 开源OCR文本检测器,基于TextBoxes++和RetinaNet
  10. 树莓派原python3.5+opencv3.3.1+tensorflow1.7.0安装