Oracle中的二进制八进制十进制十六进制相互转换函数文档格式.docx
《Oracle中的二进制八进制十进制十六进制相互转换函数文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle中的二进制八进制十进制十六进制相互转换函数文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
![Oracle中的二进制八进制十进制十六进制相互转换函数文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/22/c46751c9-11df-4f92-b258-0702fadfb4a5/c46751c9-11df-4f92-b258-0702fadfb4a51.gif)
FUNCTIONf_hex_to_oct(p_strINVARCHAR2)RETURNVARCHAR2;
FUNCTIONf_hex_to_dec(p_strINVARCHAR2)RETURNVARCHAR2;
FUNCTIONf_dec_to_bin(p_intINVARCHAR2)RETURNVARCHAR2;
FUNCTIONf_dec_to_oct(p_intINVARCHAR2)RETURNVARCHAR2;
FUNCTIONf_dec_to_hex(p_intINVARCHAR2)RETURNVARCHAR2;
ENDpkg_number_trans;
/
CREATEORREPLACEPACKAGEBODYpkg_number_transIS
FUNCTIONf_bin_to_oct(p_strINVARCHAR2)RETURNVARCHAR2IS
----------------------------------------------------------------------------------------------------------------------
--对象名称:
f_bin_to_oct
--对象描述:
二进制转换八进制
--输入参数:
p_str二进制字符串
--返回结果:
八进制字符串
--测试用例:
SELECTpkg_number_trans.f_bin_to_oct('
11110001010'
)FROMdual;
--备
注:
需要定义f_stragg函数和type_str_agg类型
v_returnVARCHAR2(4000);
v_bin
VARCHAR2(4000);
BEGIN
v_bin:
=substr('
00'
||p_str,-3*ceil(length(p_str)/3));
SELECTf_stragg(data1)INTOv_return
FROM(SELECT(CASEupper(substr(v_bin,(rownum-1)*3+1,3))
WHEN'
000'
THEN'
0'
001'
1'
010'
2'
011'
3'
100'
4'
101'
5'
110'
6'
111'
7'
END)data1
FROMdual
CONNECTBYrownum<
=length(v_bin)/3);
RETURNv_return;
EXCEPTION
WHENOTHERSTHEN
RETURNNULL;
ENDf_bin_to_oct;
FUNCTIONf_bin_to_dec(p_strINVARCHAR2)RETURNVARCHAR2IS
f_bin_to_dec
二进制转换十进制
十进制字符串
SELECTpkg_number_trans.f_bin_to_dec('
v_return
SELECTSUM(data1)INTOv_return
FROM(SELECTsubstr(p_str,rownum,1)*power(2,length(p_str)-rownum)data1
=length(p_str));
ENDf_bin_to_dec;
FUNCTIONf_bin_to_hex(p_strINVARCHAR2)RETURNVARCHAR2IS
f_bin_to_hex
二进制转换十六进制
十六进制字符串
||p_str,-4*ceil(length(p_str)/4));
FROM(SELECT(CASEupper(substr(v_bin,(rownum-1)*4+1,4))
0000'
0001'
0010'
0011'
0100'
0101'
0110'
0111'
1000'
8'
1001'
9'
1010'
A'
1011'
B'
1100'
C'
1101'
D'
1110'
E'
1111'
F'
=length(v_bin)/4);
ENDf_bin_to_hex;
FUNCTIONf_oct_to_bin(p_strINVARCHAR2)RETURNVARCHAR2IS
f_oct_to_bin
八进制转换二进制
p_str八进制字符串
二进制字符串
SELECTpkg_number_trans.f_oct_to_bin('
3612'
SELECTto_char(to_number(f_stragg(data1)))INTOv_return
FROM(SELECT(CASEupper(substr(p_str,rownum,1))
ENDf_oct_to_bin;
FUNCTIONf_oct_to_dec(p_strINVARCHAR2)RETURNVARCHAR2IS
f_oct_to_dec
八进制转换十进制
SELECTpkg_number_trans.f_oct_to_dec('
FROM(SELECTsubstr(p_str,rownum,1)*power(8,length(p_str)-rownum)data1
ENDf_oct_to_dec;
FUNCTIONf_oct_to_hex(p_strINVARCHAR2)RETURNVARCHAR2IS
八进制转换十六进制
SELECTpkg_number_trans.f_oct_to_hex('
SELECTpkg_number_trans.f_oct_to_bin(p_str)INTOv_binFROMdual;
SELECTpkg_number_trans.f_bin_to_hex(v_bin)INTOv_returnFROMdual;
ENDf_oct_to_hex;
FUNCTIONf_dec_to_bin(p_intINVARCHAR2)RETURNVARCHAR2IS
f_dec_to_bin
十进制转换二进制
p_str十进制字符串
SELECTpkg_number_trans.f_dec_to_bin('
1930'
v_hex
SELECTpkg_number_trans.f_dec_to_hex(p_int)INTOv_hexFROMdual;
SELECTpkg_number_trans.f_hex_to_bin(v_hex)INTOv_returnFROMdual;
ENDf_dec_to_bin;
FUNCTIONf_dec_to_oct(p_intINVARCHAR2)RETURNVARCHAR2IS
f_dec_to_oct
十进制转换八进制
SELECTpkg_number_trans.f_dec_to_oct('
SELECTpkg_number_trans.f_dec_to_bin(p_int)INTOv_binFROMdual;
||v_bin,-3*ceil(length(v_bin)/3));