甲骨文中通过函数实现二,八,十,十六进制任意转换

  

  说明:本文主要参考于:      http://www.eygle.com/archives/2004/06/oracle_howto_convert.html      

  

  一,先创建两个基本的进制转换函数:   

  

  ,,,1。其他进制(2,8,16)转换为十进制   
  

  <前>   ,,,Create 或是Replace  Function  To_Dec (p_Str ,,,,,,拷贝Varchar2,,,,,,要转换的数字(2,8,16进制)   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,p_From_Base 拷贝Number  Default  16),,,,,转换前的进制   ,,,,Return  Number    ,,,,,i_Num  Number  Default  0;   ,,,,,i_Hex  Varchar2 (16), Default  & # 39; 0123456789六边形abcdef # 39;;   ,才能开始   ,,,,,For 小姐:1,拷贝. .,长度(p_Str),循环   ,,,,,,,i_Num :=, i_Num  *, p_From_Base  +, Instr (i_Hex,上层(Substr (p_Str,,我,,1))),安康;1;   ,,,,,最终获得循环;   ,,,,,Return  i_Num;   ,,,最终获得To_Dec;   之前   

  ,,,2。十进制转换为其它进制(2,8,16)   
  

  <前>   ,,,Create 或是Replace  Function  To_Base (p_Dec 拷贝数,,,,,,要转换的数字(10进制)   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,p_Base 拷贝数),,,,转换后的进制   ,,,,Return  Varchar2    ,,,,,i_Str  Varchar2 (255), Default 零;   ,,,,,i_Num  Number  Default  p_Dec;   ,,,,,i_Hex  Varchar2 (16), Default  & # 39; 0123456789六边形abcdef # 39;;   ,才能开始   ,,,,,If  Trunc (p_Dec), & lt;祝辞,p_Dec 或是p_Dec  & lt; 0,那么   ,,,,,,,Raise  Program_Error;   ,,,,,最终获得;如果;   ,,,,,循环   ,,,,,,,i_Str :=, Substr (i_Hex,国防部(i_Num, p_Base), +, 1, 1), | |, i_Str;   ,,,,,,,i_Num :=, Trunc(时间/i_Num  p_Base);   ,,,,,,,Exit  When  i_Num =, 0;   ,,,,,最终获得循环;   ,,,,,Return  i_Str;   ,,,最终获得To_Base;   之前   

  二,通过上面两个函数,可以将10进制作为转换的中间桥梁。在进行任意进制转换时,都可以先将要转换的进制转为10进,,,,制,然后再通过10进制转换为别的进制只通过下面函数来实现:   

  <前>   ,,,Create 或是Replace  Function  Bodh_Convert (p_Str ,拷贝Varchar2,,,要转换的数字(2、8、10、16进制)   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,p_From 号码,,,,,,,,转换前的进制   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,p_To ,,号码),,,,,,,转换后的进制   ,,,,Return  Varchar2    ,,,,,v_Temp  Number  Default  0;   ,,,,,v_Num , Varchar2 (128), Default 零;   ,才能开始   ,,,,,If  p_From =2,然后   ,,,,,,,If  p_To =8,然后   ,,,,,,,,,v_Temp :=, To_Dec (p_From p_Str也);   ,,,,,,,,,v_Num ,:=, To_Base (p_To v_Temp也);   ,,,,,,,Elsif  p_To =10,然后   ,,,,,,,,,v_Num :=, To_Dec (p_From p_Str也);   ,,,,,,,Elsif  p_To =16,然后   ,,,,,,,,,v_Temp :=, To_Dec (p_From p_Str也);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

甲骨文中通过函数实现二,八,十,十六进制任意转换