我爱编程

Oracle块中是否保留空值

2016-09-01  本文已影响0人  读或写

在看某些文章中有写到,oracle在块中不会存储空列。我自己试了一把,发现叙述有误。现在将我的实验结果记录以下。

先上结论:

1、对于空值列不是最后一个字段的oracle会存储在块中,dump出来的值是:

col  0: *NULL*

col  1: *NULL*

col  2: [ 5]  c4 03 07 3a 34

col  3: [ 7]  54 52 49 47 47 45 52

col  4: [ 5]  56 41 4c 49 44

col  5: [ 7]  78 9b 0c 0a 01 12 3a

col  6: [ 6]  61 62 63 31 32 33

2、空值的列是最后一个列,那么将不会存储在块中

tl: 55 fb: --H-FL-- lb: 0x0  cc: 6《===这个有6个列

col  0: *NULL*

col  1: [24]

53 59 53 5f 49 4c 30 30 30 30 30 38 36 34 36 36 43 30 30 30 30 39 24 24

col  2: [ 5]  c4 03 07 3a 2a

col  3: [ 5]  49 4e 44 45 58

col  4: [ 5]  56 41 4c 49 44

col  5: [ 7]  78 9b 0c 09 0f 12 3a

tab 0, row 1, @0x334

tl: 40 fb: --H-FL-- lb: 0x1  cc: 7《===这个有7个列,表一共有7个列,对比证明结论2

col  0: *NULL*

col  1: *NULL*

col  2: [ 5]  c4 03 07 3a 34

col  3: [ 7]  54 52 49 47 47 45 52

col  4: [ 5]  56 41 4c 49 44

col  5: [ 7]  78 9b 0c 0a 01 12 3a

col  6: [ 6]  61 62 63 31 32 33

实验方法

1、创建一个简单的表

2、插入一些数据

3、update为空值或者''

4、dump数据块

另外在实验中也发现,最后一个空值字段在update为非空并且commit后,不会立马更改块中的内容,需要等待数据刷入磁盘后,才会在dump文件中发现多一个列出来。

上一篇下一篇

猜你喜欢

热点阅读