动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.甲骨文连续收购积蓄实力欲与SAP抗.
.在Oracle 10g中建立没有域名的DB.
.新手浅谈数据库中的设计技巧(一).
.如何让Linux运行两块以太网卡.
.linux显卡的配置(2).
.在不同字符集的数据库之间导入数.
.Oracle9i 数据库管理实务讲座(六.
.为最佳性能而调优 Red Hat(1).
.Oracle数据库9i在AIX环境下的性能.
.oracle10g在Solaris10上的安装.
.Win2000安装ASE12.5(英文版)显乱.
.巧用Rman 来管理裸设备上的数据库.
.ORACLE用SPFILE无法启动.
.Oracle与DB2数据类型分类对应说明.
.甲骨文发布β版11g数据库含182项.
.C#中使用Oracle 存储过程笔记.
.删除重复记录的问题.
.ORACLE在HP-UX下的系列问题处理(.
.用智能优化限制提高Oracle数据库.
.数据库程序包全局变量的应用.

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

发表日期:2008-2-9 |



  以下内容包括:
  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;
   
       N2 := trunc(N2 / 256);
       EXIT WHEN N2=0;
     END LOOP;
     RETURN H;
  END dec_to_hex;
   
  FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER IS
  v_charpos NUMBER;
  v_charval CHAR(1);
  v_return NUMBER DEFAULT 0;
  v_power NUMBER DEFAULT 0;
  v_string VARCHAR2(2000);
  BEGIN
  v_string := TO_CHAR(octin);
  v_charpos := LENGTH(v_string);
  WHILE v_charpos > 0 LOOP
  v_charval := SUBSTR(v_string,v_charpos,1);
  IF v_charval BETWEEN '0' AND '7' THEN
  v_return := v_return + TO_NUMBER(v_charval) * POWER(8,v_power);
  ELSE
  raise_application_error(-20621,'Invalid input');
  END IF;
  v_charpos := v_charpos - 1;
  v_power := v_power + 1;
  END LOOP;
  RETURN v_return;
  END oct_to_dec;
   
  FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2 IS
  v_decin NUMBER;
  v_next_digit NUMBER;
  v_result varchar(2000);
  BEGIN
  v_decin := decin;
  WHILE v_decin > 0 LOOP
  v_next_digit := mod(v_decin,8);
  v_result := to_char(v_next_digit) v_result;
  v_decin := floor(v_decin / 8);
  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(1);
  v_return NUMBER DEFAULT 0;
  v_power NUMBER DEFAULT 0;
  v_string VARCHAR2(2000);
  BEGIN
  v_string := TO_CHAR(binin);
  v_charpos := LENGTH(v_string);
  WHILE v_charpos > 0 LOOP
  v_charval := SUBSTR(v_string,v_charpos,1);
  IF v_charval BETWEEN '0' AND '1' THEN
  v_return := v_return + TO_NUMBER(v_charval) * POWER(2,v_power);
  ELSE
  raise_application_error(-20621,'Invalid input');
  END IF;
  v_charpos := v_charpos - 1;
  v_power := v_power + 1;
  END LOOP;
  RETURN v_return;
  END bin_to_dec;
   
  FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2 IS
  v_decin NUMBER;
  v_next_digit NUMBER;
  v_result varchar(2000);
  BEGIN
  v_decin := decin;
  WHILE v_decin > 0 LOOP
  v_next_digit := mod(v_decin,2);
  v_result := to_char(v_next_digit) v_result;
  v_decin := floor(v_decin / 2);
  END LOOP;
  RETURN v_result;
  END dec_to_bin;
   
  FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER IS
  BEGIN
  RETURN dec_to_bin(hex_to_dec(hexin));
  END hex_to_bin;
   
  FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2 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 VARCHAR2 IS
  BEGIN
  RETURN dec_to_hex(oct_to_dec(octin));
  END oct_to_hex;
   
  FUNCTION hex_to_oct (hexin IN VARCHAR2) 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 VARCHAR2 IS
     rawlen    NUMBER;
     hex     VARCHAR2(32760);
     rawparam   VARCHAR2(32760);
     i      NUMBER;
  BEGIN
     hex := rawtohex(v_raw);
     rawlen := length(hex);
     i := 1;
     WHILE i <= rawlen 
      LOOP
       rawparam := rawparamCHR(hex_to_dec(substrb(hex,i,2)));
       i := i + 2;
      END LOOP;
   
     RETURN rawparam;
  END raw_to_char;
    
   
  FUNCTION char_to_raw(v_char varchar2) RETURN LONG RAW IS
     rawdata   LONG RAW;
     rawlen    NUMBER;
     hex     VARCHAR2(32760);
     i      NUMBER;
    BEGIN
     rawlen := length(v_char);
     i := 1;
     WHILE i <= rawlen 
      LOOP
       hex := dec_to_hex(ascii(substrb(v_char,i,1)));
       rawdata := rawdata HEXTORAW(hex);
       i := i + 1;
      END LOOP;
   
     RETURN rawdata;
     
  END;
   
  END PKG_DM_BASE_CONV;
  /
上一篇:如何正确的在对in操作使用变量绑定 人气:442
下一篇:oracle中关于数据库和表的问题 人气:391
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-7 站长中国企业(公司)网站系统 v4.2
2008-9-7 PBDigg v2.0 Build 20080821
2008-9-7 玩玩小游戏FLASH系统 v2.1
2008-9-7 522QQ在线电视直播程序 v1.1
2008-9-7 Pcook cms 文章管理系统 (老Y CM
2008-9-7 仿代码小说小偷系统 v1.0
2008-9-7 百度一搜集成搜索管理系统
2008-9-7 小贤统计器 v1.0
2008-9-7 UCenter Home-中秋搏饼插件 v1.2
2008-9-7 iBlacklist通话黑名单汉化破解补
2008-9-7 EndlessWalls无尽壁纸 v1.0.4破解
2008-9-7 Dynolicious车载测量仪v1.1破解版
2008-9-7 iVoodoo巫毒娃娃1.0.1破解版
2008-9-7 iWallpape精品墙纸1.2破解版
2008-9-7 iChillout自然音效工具1.1破解版
2008-9-7 Todo计划提醒1.2破解版
2008-9-7 allRadio电台集合1.01破解版
2008-9-7 My Money个人理财1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号