千家信息网

Oralce中怎么将64进制转换为10进制

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Oralce中怎么将64进制转换为10进制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.实现函 Create Or Re
千家信息网最后更新 2026年11月02日Oralce中怎么将64进制转换为10进制

Oralce中怎么将64进制转换为10进制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1.实现函

       Create Or Replace Function Sf_To_Deci(Str In Varchar2) Return Number As          Digit Number(32);        Begin          Select Sum(Data)                Into Digit                From (Select (Case                                           When Ascii(Substr(Str, Rownum, 1)) = 43 Then                                                62                                           When Ascii(Substr(Str, Rownum, 1)) = 47 Then                                                63                                           When Ascii(Substr(Str, Rownum, 1)) Between 48 And 57 Then                                                Ascii(Substr(Str, Rownum, 1)) + 4                                           When Ascii(Substr(Str, Rownum, 1)) Between 65 And 90 Then                                                Ascii(Substr(Str, Rownum, 1)) - 65                                           When Ascii(Substr(Str, Rownum, 1)) Between 97 And 122 Then                                                Ascii(Substr(Str, Rownum, 1)) - 71                                           Else                                                Null                                         End) * Power(64, Length(Str) - Rownum) Data                                From Dual                          Connect By Rownum <= Length(Str));          Return Digit;        End;

2.64进制基数

A-Z(0-25),a-z(26-51),0-9(52-61),+(62),/(63)

3.实现原理

通过字符对应的ASCII值与实际表示的64进制值进行换算,以此来减少判断分类。换算关系如下:

A~Z   65~90        -65     =    0~25a~z   97~122         -71     =    26~510~9   48~57          +4      =    52~61+    43       +19        =    62/    47       +16        =     63

4.应用

rowid是用64进制来表示的,它的组成:数据对象号(6位)+相对文件号(3位)+数据块号(6位)+在数据块中的行数(3位)。

Oracle包dbms_rowid中提供了使用rowid来查询其信息的函数,如下所示:

 select                 rowid,                dbms_rowid.rowid_object(rowid) object_id,  --51366 (AAAMim)AAFAAAAAMAAC 数据对象号                dbms_rowid.rowid_relative_fno(rowid) file_id, --5        AAAMim(AAF)AAAAAMAAC 相对文件号                dbms_rowid.rowid_block_number(rowid) block_id, --12      AAAMimAAF(AAAAAM)AAC 在第几个块                dbms_rowid.rowid_row_number(rowid) num   --2   AAAMimAAFAAAAAM(AAC)在block中的行数        from test where rowid = 'AAAMimAAFAAAAAMAAC';

下面这个函数对上面的函数改造后可以一次性返回这些信息

Create Or Replace Function Rowid_To_Info(Str In Varchar2) Return Varchar2 As          Digit Varchar2(32);          Rest  Varchar2(400);          Str_1 Varchar2(10) := Substr(Str, 1, 6);          Str_2 Varchar2(10) := Substr(Str, 7, 3);          Str_3 Varchar2(10) := Substr(Str, 10, 6);          Str_4 Varchar2(10) := Substr(Str, 16, 3);          Type Str_Varray Is Varray(4) Of Varchar2(10);          Type Rest_Varray Is Varray(4) Of Varchar2(20);          v_Str_Varray  Str_Varray := Str_Varray(Str_1, Str_2, Str_3, Str_4);          v_Rest_Varray Rest_Varray := Rest_Varray('Object_id:','File_id:','Block_id:','Block_num:');        Begin          For i In 1 .. 4 Loop                Select Sum(Data)                  Into Digit                  From (Select (Case                                                 When Ascii(Substr(v_Str_Varray(i), Rownum, 1)) = 43 Then                                                  62                                                 When Ascii(Substr(v_Str_Varray(i), Rownum, 1)) = 47 Then                                                  63                                                 When Ascii(Substr(v_Str_Varray(i), Rownum, 1)) Between 48 And 57 Then                                                  Ascii(Substr(v_Str_Varray(i), Rownum, 1)) + 4                                                 When Ascii(Substr(v_Str_Varray(i), Rownum, 1)) Between 65 And 90 Then                                                  Ascii(Substr(v_Str_Varray(i), Rownum, 1)) - 65                                                 When Ascii(Substr(v_Str_Varray(i), Rownum, 1)) Between 97 And 122 Then                                                  Ascii(Substr(v_Str_Varray(i), Rownum, 1)) - 71                                                 Else                                                  Null                                           End) * Power(64, Length(v_Str_Varray(i)) - Rownum) Data                                  From Dual                                Connect By Rownum <= Length(v_Str_Varray(i)));                If i = 4 Then                  Rest := Rest || v_Rest_Varray(i) || Digit;                Else                  Rest := Rest || v_Rest_Varray(i) || Digit || chr(9);                End If;                    End Loop;          Return Rest;        End;    

查询:

SQL> select rowid_to_info('AAAMimAAFAAAAAMAAC')from dual;        ROWID_TO_INFO('AAAMIMAAFAAAAAMAAC')        --------------------------------------------------------------------------------        Object_id:51366        File_id:5      Block_id:12    Block_num:2

看完上述内容,你们掌握Oralce中怎么将64进制转换为10进制的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

进制 数据 函数 信息 内容 对象 文件 方法 更多 问题 换算 查询 束手无策 为此 一次性 原因 原理 基数 字符 实际 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 科技创新与互联网经济 美国互联网科技巨头监管 奇酷互联网科技公司 远拓互联网科技 亿账通互联网科技 卓越科技互联网 招聘 互联网科技产品 济南华为互联网科技产业总部基地 互联网时代科技改变生活 荆州市昕露互联网络科技有限公司 玉溪互联网科技怎么选 深圳市优智互联网科技有限公司 银行科技岗属于互联网吗 启辰互联网科技 张召忠谈中国互联网科技 2021世界互联网领先科技成果发布 福州德业互联网科技 互联网科技机房 上海万顺科技互联网有限公司招聘 深圳市人人互联网科技有限公司 互联网 科技创新 壹账通互联网科技 互联网科技上市公司 天下捷融互联网科技 深圳期待互联网科技 衡水科技产业互联网平台 工业互联网科技创业 山东大美朱楼互联网科技有限公司 互联网科技创业有什么好项目
0