
应该是150。Varray是否在分配额外的空间?
发布于 2017-11-05 00:23:09
Varray存储varray的总长度和每个元素的长度,所以是的,它需要一些额外的字节。
我不知道关于这个主题的任何公开文件,我也不知道完整的内部陈述,所以下面是一个简单的例子。
create or replace type jobs_done as varray(5) of varchar2(30);
/
create table emp_job_his (empno number(6), jobhistory jobs_done);
insert into emp_job_his values (1, jobs_done(
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC',
'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD',
'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE')
);
commit;
alter system checkpoint;
select
dbms_rowid.rowid_relative_fno(rowid) as fno,
dbms_rowid.rowid_block_number(rowid) as block_number
from emp_job_his;
FNO BLOCK_NUMBER
---------- ------------
4 134
alter system dump datafile 4 block 134;垃圾场的相关部分:
col 1: [162]
88 01 a2 01 01 00 05 1e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 1e 42 42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 1e 43 43 43 43 43
43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
1e 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
44 44 44 44 44 44 1e 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
45 45 45 45 45 45 45 45 45 45 45 45第三个字节,a2,是列的长度,以字节= 162 (col 1: [162])为单位。
第七个字节05是数组= 5中的元素数。
从那以后,每个元素都以长度+数据的形式存储。长度是1e = 30,数据是字母A = 0x41的30倍,依此类推。
https://dba.stackexchange.com/questions/190012
复制相似问题