[20171220]toad plsql显示整形的bug.txt
[20171220]toad plsql显示整形的bug.txt
--//下午有itpub网友反应,一个查询在sqlplus,pl/sql下不同.链接如下:
--//http://www.itpub.net/thread-2095697-1-1.html
--//我测试感觉是数据出现错误.直接那它的数据测试看看.
1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table t ( id number , a number(15,2));
Table created.
insert into t values (1,7334.00);
insert into t values (2,7334.00);
commit ;
SCOTT@book> select rowid,t.*,dump(a,16) c30 from t;
ROWID ID A C30
------------------ ---------- ---------- ------------------------------
AAAWLoAAEAAAAIkAAA 1 7334 Typ=2 Len=3: c2,4a,23
AAAWLoAAEAAAAIkAAB 2 7334 Typ=2 Len=3: c2,4a,23
--//正常7334的编码就是c24a23
SCOTT@book> @ &r/conv_n c24a23
old 1: select utl_raw.cast_to_number(lower('&1')) n20 from dual
new 1: select utl_raw.cast_to_number(lower('c24a23')) n20 from dual
N20
----------
7334
--//而对方看到的编码是c248eb,明显不对.
SCOTT@book> @ &r/conv_n c248eb
old 1: select utl_raw.cast_to_number(lower('&1')) n20 from dual
new 1: select utl_raw.cast_to_number(lower('c248eb')) n20 from dual
select utl_raw.cast_to_number(lower('c248eb')) n20 from dual
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.UTL_RAW", line 388
SCOTT@book> @ &r/rowid AAAWLoAAEAAAAIkAAA
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
90856 4 548 0 0x1000224 4,548 alter system dump datafile 4 block 548 ;
SCOTT@book> alter system checkpoint;
System altered.
SCOTT@book> alter system flush BUFFER_CACHE;
System altered.
2.通过bbed修改数据块:
SCOTT@book> @ &r/bbvi 4 548
BVI_COMMAND
-----------------------------------------------------
bvi -b 4489216 -s 8192 /mnt/ramdisk/book/users01.dbf
--//执行如上命令,修改数据块其中一条记录编码 c24a23 => c248eb.
$ bvi -b 4489216 -s 8192 /mnt/ramdisk/book/users01.dbf
..
00449FB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FE0 00 00 00 00 00 00 00 00 2C 02 02 02 C1 03 03 C2 ........,.......
00449FF0 4A 23 2C 01 02 02 C1 02 03 C2 48 EB 02 06 31 3B J#,.......H...1;
~~~~~~~~
0044A000
--//下划线处就是修改后内容.注意要在bbed下执行sum apply更新检查和.
BBED> set dba 4,548
DBA 0x01000224 (16777764 4,548)
BBED> sum apply
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
Check value for File 4, Block 548:
current = 0xd0bc, required = 0xd0bc
3.通过sqlplus查询:
SCOTT@book> select rowid,t.*,dump(a,16) c30 from t;
ROWID ID A C30
------------------ ---------- ---------- ------------------------------
AAAWLoAAEAAAAIkAAA 1 Typ=2 Len=3: c2,48,eb
AAAWLoAAEAAAAIkAAB 2 7334 Typ=2 Len=3: c2,4a,23
--//在toad下执行:
set linesize 160
column c30 format a30
select rowid,t.*,dump(a,16) c30 from t;
--//选择execute as script按钮,结果如下:
ROWID ID A C30
------------------ ---------- ---------- ------------------------------
AAAWLoAAEAAAAIkAAA 1 7334 Typ=2 Len=3: c2,48,eb
AAAWLoAAEAAAAIkAAB 2 7334 Typ=2 Len=3: c2,4a,23
2 rows selected.
--//很明显toad显示出了问题.7334的整形编码是c2,4a,23. pl/sql也一样不再测试.
--//为什么呢?
0x4a=74
0x23=35
--//oracle采用百位进制,为了避开0 ,使用+1表示.这样74=>73,35=>34 ,这样表示7334无疑是正确的.
48=72
eb=235
--//我的理解或者(乱猜): 235= 2*100+35, 相当于 前面变成72+2=74 => 减少1对应73,剩下35 减少1,对应34,这样解析为7334
--//按照道理toad工具不大可能解析整形,只能是相关的驱动出了问题.纯粹乱猜,那位知道.
4.可以修改id=2的记录:
--//135=0x87,如果修改c2 49 87 应该对应的整形也是7334,看看是否正确.
SCOTT@book> alter system flush BUFFER_CACHE;
System altered.
SCOTT@book> alter system checkpoint;
System altered.
$ bvi -b 4489216 -s 8192 /mnt/ramdisk/book/users01.dbf
..
00449F80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449F90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00449FE0 00 00 00 00 00 00 00 00 2C 02 02 02 C1 03 03 C2 ........,.......
00449FF0 49 87 2C 01 02 02 C1 02 03 C2 48 EB 01 06 31 3B I.,.......H...1;
~~~~~ ~~~~~~~~
0044A000
--//下划线处就是修改后内容.注意要在bbed下执行sum apply更新检查和.
--//sqlplus 下查询:
SCOTT@book> select rowid,t.*,dump(a,16) c30 from t;
ROWID ID A C30
------------------ ---------- ---------- ------------------------------
AAAWLoAAEAAAAIkAAA 1 Typ=2 Len=3: c2,48,eb
AAAWLoAAEAAAAIkAAB 2 Typ=2 Len=3: c2,49,87
--//在toad下执行:
set linesize 160
column c30 format a30
select rowid,t.*,dump(a,16) c30 from t;
ROWID ID A C30
------------------ ---------- ---------- ------------------------------
AAAWLoAAEAAAAIkAAA 1 7334 Typ=2 Len=3: c2,48,eb
AAAWLoAAEAAAAIkAAB 2 7334 Typ=2 Len=3: c2,49,87
2 rows selected.
--//这样也验证我的判断.
--//我在测试中遇到出现坏块的情况(也许忘记sum apply),我的dg自动修复了坏块,我停止dg.再重复就演示相似的情况.
--//我在9.2.0.8 ,10.2.0.4 做了一点测试:
--//我在10g下查询:
SCOTT@test> @ &r/conv_n c248eb
new 1: select utl_raw.cast_to_number(lower('c248eb')) n20 from dual
N20
----------
71bc
--//它能执行,11g报错.
--//在9.2.0.8下:
08:20:57 sys@XXT1> select utl_raw.cast_to_number(lower('c248eb')) n20 from dual;
N20
----------
71`@
--//也能执行.
--//到底人为修改还是那个程序能录入这样效果,就不知道了.
[20171220]toad plsql显示整形的bug.txt的更多相关文章
- [20191002]函数dump的bug.txt
[20191002]函数dump的bug.txt --//前几天写raw转化oracle number脚本,在使用函数dump时遇到一些问题,做一个记录:--//oracle number 0 编码 ...
- cocos2d-x CCEditBox 字符不能显示完全的bug
cocos2d-x CCEditBox 字符不能显示完全的bug (cocos2dx版本 2.2.0)用CCEditBox制作帐号输入框,当输入的内容超过框的宽度时,框里面不会显示当前输入的字符,显示 ...
- PLSQL显示乱码-无法进行中文条件查询解决
PLSQL显示乱码-无法进行中文条件查询解决 原因: PLSQL乱码问题皆是ORACLE服务端字符集编码与PLSQL端字符集编码不一致引起.类似乱码问题都可以从编码是否一致上面去考虑. 解决: 1. ...
- 将CMD内的显示内容输出到txt文件
将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt //xxxx为命令 如ping www.baidu.com //-t >c:\test.tx ...
- [20191213]toad 12下BIND_AWARE提示无效.txt
[20191213]toad 12下BIND_AWARE提示无效.txt --//链接http://blog.itpub.net/267265/viewspace-2130781/的测试,发现当时测试 ...
- [20190502]给显示输出加入时间戳.txt
[20190502]给显示输出加入时间戳.txt --//有别人问我执行脚本中timestamp.pl的代码,实际上有些文章里面有源代码,有一些忘记写上了.--//贴上:$ cat /usr/loca ...
- web标准:img图片在ie6下显示空白的bug解决方案
在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是“见机行事”. 1.将图片转换为块级对象 ...
- MDK5.01百度云下载,安装微软雅黑混合字体,字体效果很棒,解决显示中文的BUG
微软雅黑字体http://pan.baidu.com/s/1nt9Epuh 初步尝试,以前的小BUG都已经解决了.下面是安装雅黑字体后的字体效果,很爽.第一步:安装雅黑字体.第二步:选择Edit--- ...
- window系统谷歌浏览器百度搜索框光标不能输入并且不显示光标----自制bug以及解决
--------------------bug无处不在------------------------- 今天在搞代码的时候,保存文件无意中犯了个致命错误,文件名称写入非法字符,可能与Windows系 ...
随机推荐
- 【2019北京集训2】Elephant 平衡树
题目大意:给你一个长度为$n$的序列$A_i$,有$q$次操作,每次操作为以下三种之一: 询问区间的$F_M(A_i)$的最大公约数. 区间翻转,区间加一个正数. 我们定义$gcd(0,0)=0$,且 ...
- 写好Java代码的30条经验总结
成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...
- [原]ZolltyMVC框架简介
ZolltyMVC框架是一款轻量级的Java应用编程框架(Java Application Framework),融合了常用的IOC/DI.MVC(注解.XML配置式.RESTful风格.模型驱动.视 ...
- LDA-线性判别分析(二)Two-classes 情形的数学推导
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- Eclipse Gradle 构建多模块项目
注意: 1.Eclipse不如IDEA智能,Eclipse建立的Gradle Project项目在目录级别上是同级的; 2.user-web模块如果要引用user-service模块,直接引用是找不到 ...
- lightswitch 添加 TreeView 控件
代码片段 <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk&q ...
- 负载均衡+session共享(memcached-session-manager实现)
前言 先给大家伙拜个年,祝大家:新的一年健健康康,平平安安! 本文的形成参考了很多人的博客,最多的应该是青葱岁月兄的这篇博客,大家可以先去看下,熟悉一些内容,因为本文是直接实践,一些理论性的知识就需要 ...
- Spring之Bean的注入
Bean的配置中介绍的是Bean声明问题,在哪声明怎么声明的问题.Bean的注入是怎么实例化,怎么注入的问题.Bean注入的方式有两种,一种是在XML中配置,另一种则是使用注解的方式注入. 一.XML ...
- HDFS的副本存放策略(全)
HDFS的副本存放策略 HDFS作为Hadoop中的一个分布式文件系统,而且是专门为它的MapReduce设计,所以HDFS除了必须满足自己作为分布式文件系统的高可靠性外,还必须为MapReduc ...
- mysql 主从模式总结(一)
1. 主从模式的部署步骤 目标:部署一个有3台主机的单主模式的MySQL分组. Primary:192.168.197.110. Secondary:192.168.197.111. Secondar ...