[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`@
--//也能执行.

--//到底人为修改还是那个程序能录入这样效果,就不知道了.

转载于:https://www.cnblogs.com/lfree/p/8078501.html

[20171220]toad plsql显示整形的bug.txt相关推荐

  1. 将CMD内的显示内容输出到txt文件

    将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt        //xxxx为命令  如ping www.baidu.com //-t >c:\test.tx ...

  2. [20170816]Join Elimination Bug.txt

    [20170816]Join Elimination Bug.txt https://jonathanlewis.wordpress.com/2017/08/14/join-elimination-b ...

  3. 解决 select2 开启 tags 输入中文显示不全的BUG

    解决 select2 开启 tags 输入中文显示不全的BUG 一.急着修复,不求甚解: 二.分享Debug思路 三.如果你不想动源码,还有一个非完美修复: 相关BUG 一.急着修复,不求甚解: 直接 ...

  4. JEECMS的新浪图集在IE9、10不能显示大图片BUG的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 最近我给学校对外交流合作处做的网站,因为是学java开发,所以就基于JEECMS去做. 等到项目做好,差不多要 交工的时候,发 ...

  5. Discuz!NT - 在线显示列表 游客 bug 修复

    引发bug的条件:当你修改了系统组里面的[游客]组 的名字后!! 你会发现首页上底部的在线显示列表里始终都是显示"游客"字样而非你改过得字样!如图 至此你需要运行一个t-sql脚本 ...

  6. google浏览器显示页面显示不完整bug

    bug现象 页面刷新后之会显示当前一屏的内容,其他部分的需要等待一段时间才会加载出来 找了半天没有找到原因,发现图片有点超出屏幕,于是打算先把样式调好在来调这边的,结果把样式调好就没有问题了 样式上我 ...

  7. 解决了一个Web网页显示不全的BUG

    一[BUG描述] 最近开发一个Web系统的过程中遇到了一个诡异的BUG,花了2天时间解决,感觉如释重负. 这个BUG的现象是这样的:一个很普通的JSP网页,本来显示很正常,后来我在这个html页面上加 ...

  8. WPF编写的txt阅读器(自适应各种编码,解决显示大数据量txt卡顿的问题)

    运行效果如下: 右击标题栏可选择下一页,上一页,打开文件,关闭程序 注意: 1.因为用textbox一次性显示1M以上的数据会特别慢,所以我在读取完txt文件之后按照每10240Byte字节为一页,每 ...

  9. CSS处理文字一行显示,超出用省略号。包含一个微信小程序使用css文字溢出一行显示的一个bug

    一.核心代码   注意:text-overflow 必须要搭配 white-space 才能生效 overflow: hidden; /* 文字溢出隐藏 */ white-space: nowrap; ...

最新文章

  1. android 图片 编辑app,图片编辑工具手机版下载-图片编辑工具app下载8.33.107安卓官方版-西西软件下载...
  2. 将编号为0和1的两个栈存放于一个数组空间V[m]中。
  3. Hibernate4之session核心方法
  4. ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 42. Created with MySQL 5
  5. 智慧城市知识图谱模型与本体构建方法
  6. 13款WordPress使用必装插件
  7. Golang笔记——json介绍
  8. SpringBoot项目请求路径中有正反斜杠的处理办法
  9. 微程序相关的两个知识点
  10. YDOOK: ANSYS Maxwell 19 教程17:Maxwell 2D 网格划分 网格划分工具有哪些
  11. 小杯子微信多开 双开共存版 ios8.0微信版本6.0免费获取了
  12. 计算机保存的快捷方式,保存快捷键ctrl加什么
  13. Java方法中参数String...你需要知道的事
  14. 捷豹:车到用时方知养,可知彼时恨太迟
  15. 今日头条 2018 AI Camp 视频面试
  16. UT2015学习笔记
  17. html字体样式(2)
  18. win11 任务栏显示所有图标 不需要任何插件 (win11 22h2 版本已失效)
  19. leetcode1375灯泡开关三
  20. 美赛数据(各国统计数据网站大全)

热门文章

  1. [转] Android应用如何反馈Crash报告
  2. springMVC的流程
  3. 版本控制之svn命令行下检出、提交、更新
  4. 001-spring结合quartz使用
  5. Android ContentProvider的介绍(很详细)
  6. Servlet中的转发
  7. Redis中的管道有什么用?
  8. MySQL审计特性调研
  9. ShardingSphere(二) 水平分表配置搭建,实现分表写入读取
  10. shell脚本手动执行成功,定时任务调用失败的解决方法。