这是一个经常被问到的问题。

思路:创建一个只有 char 列的表,往表里插入数据,然后通过 DBMS_ROWID 来分析每一行的文件号和块号,具有相同文件号和块号的行数就是一个块中存放的行数。

创建表并插入数据:

create table cyt (flag char);
begin
    for i  in 1..8000 loop
    insert into cyt values('x');
    end loop;
    commit;
end;
/

调用dbms_rowid包来研究行所在的块:

select f, b, count(*)
from (select dbms_rowid.rowid_relative_fno(rowid) f,
             dbms_rowid.rowid_block_number(rowid) b
      from cyt)
group by f, b;

查询结果是 660,可见并不是将一个块的全部都用来保存数据。另外一个例子是 hr.employees 表中的数据,一个块可以装98行。

-- By 许望(RHCA、OCM、VCP)
最后修改:2020 年 07 月 17 日 05 : 42 PM
如果觉得我的文章对你有用,请随意赞赏