这是一个经常被问到的问题。
思路:创建一个只有 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行。