[20241110]使用xto10.sql脚本遇到的问题.txt --//自己在使用xto10.sql脚本时,输入参数错误,我没有想到竟然执行有结果,例子: SYS@book> @ xto10 d5f8b304 10 BASE10 BASE10 ------------------------------ ------------------------------ d5f8b304 136591304 --//按照道理我输入一个16进制数,转换10进制,应该输入如下: SYS@book> @ xto10 d5f8b304 '' BASE16 BASE10 ------------------------------ ------------------------------ d5f8b304 3589845764 SYS@book> @ xto10 d5f8b304 16 BASE16 BASE10 ------------------------------ ------------------------------ d5f8b304 3589845764 --//注:如果没有参数2缺省16。 --//我前面执行也 成功,相当于 d5f8b304 d->13 f->15 b->11 13*10^7+ 5*10^6+ 15*10^5+ 8*10^4+ 11*10^3+ 304 = 136591304 --//主要问题是无法保证输入参数1的是对应进制X的类型,比如d5f8b304。例子: SYS@book> @ xto10 z 2 BASE2 BASE10 ------------------------------ ------------------------------ z 35 --//无法保证z是2进制数。导致结果出现35. --//也就是先要根据参数2判断参数1是否符合需求,采用继续执行。 --//而16进制限制16进制码表,找不到z出现负数。 SYS@book> @ xto10 z 16 BASE16 BASE10 ------------------------------ ------------------------------ z -1 --//做一点改进,限制编码长度,并且如果n=-1,在显示结果时提示错误。 SYS@book> @ xto10 8d 10 BASE10 BASE10 ERRMSG ------------------------------ ------------------------------ ------ 8d 79 bad! --//注:d 在10进制取不到编码返回-1,这样计算结果时80-1=79.但是我判断里面出现返回-1的情况,ERRMSG显示错误。 SCOTT@book> @ xto10 8d 16 BASE16 BASE10 ERRMSG ------------------------------ ------------------------------ ---- 8d 141 good --//10tox.sql以及xtoy.sql脚本,也应该存在类似问题,有空也检查看看。 --//源代码修改如下: $ cat xto10.sql -- Copyright 2023 lfree. All rights reserved. -- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. -------------------------------------------------------------------------------- -- -- File name: xto10.sql -- Purpose: decimal convert Ximal -- -- Author: lfree -- -- Usage: -- @ xto10 <Ximal_value> Ximal -- convert hexadecimal to decimal -- @ xto10 <hexadecimal> -- @ xto10 <hexadecimal> 16 -- -------------------------------------------------------------------------------- set term off column 2 new_value 2 select null "2" from dual where 1=2; select nvl('&2',16) "2" from dual; set term on column base10 format a30 column base&&2 format a30 column errmsg format a6 SELECT CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END base&2, TO_CHAR (SUM (n * POWER (&2, p))) base10,min(decode(n,-1,'bad!','good')) errmsg --SELECT CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END base&2, TO_CHAR (SUM (n * POWER (&2, p))) base10 FROM ( SELECT INSTR ( CASE &&2 WHEN 32 THEN '0123456789abcdfghjkmnpqrstuvwxyz' WHEN 16 THEN '0123456789abcdef' ELSE substr('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_',1,&&2) END ,SUBSTR ( CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END ,LEVEL ,1 ) ) - 1 N ,LENGTH ('&&1') - LEVEL P ,SUBSTR ('&&1', LEVEL, 1) C FROM DUAL CONNECT BY LEVEL <= LENGTH ('&&1'));
[20241110]使用xto10.sql脚本遇到的问题.txt
来源:这里教程网
时间:2026-03-03 20:50:07
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle Linux 8.10 图形化安装 Oracle Database 21c
- 长沙岳麓区家具馆:邂逅高颜值餐桌,开启优雅用餐时光
长沙岳麓区家具馆:邂逅高颜值餐桌,开启优雅用餐时光
26-03-03 - 芯片行业ERP系统设计需要考虑哪些因素
芯片行业ERP系统设计需要考虑哪些因素
26-03-03 - 软件签名添加时间戳
软件签名添加时间戳
26-03-03 - OPatch安装补丁将Oracle 19.3升级到19.23
OPatch安装补丁将Oracle 19.3升级到19.23
26-03-03 - Oracle数据库如何模拟ORA-600 [4193]错误?如何解决?
Oracle数据库如何模拟ORA-600 [4193]错误?如何解决?
26-03-03 - shutdown abort关库,真的有可能起不来吗?
shutdown abort关库,真的有可能起不来吗?
26-03-03 - 又是windown服务器断电引起的ora-00333
又是windown服务器断电引起的ora-00333
26-03-03 - 同事不小心drop column了一个列,真的凉凉了吗?
同事不小心drop column了一个列,真的凉凉了吗?
26-03-03 - 数据库数据恢复—Oracle数据库数据恢复案例
数据库数据恢复—Oracle数据库数据恢复案例
26-03-03
