cluster table里的rowid
在cluster里的表,会出现rowid一样的情况在oracle 10.2.0.5测试环境中:
emp和 dept都是一个index cluster的表,他们之间就有rowid相同的行。
select rowid from emp
intersect
select rowid from dept;
AAASfUAAVAAAe/cAAA
AAASfUAAVAAAe/cAAB
AAASfUAAVAAAe/cAAC
AAASfUAAVAAAe/cAAD
dump其中一个block,block header就只记录了data object id 。
select dbms_rowid.rowid_relative_fno(rowid) rfid, dbms_rowid.rowid_block_number(rowid) block_id from emp where rowid='AAASfUAAVAAAe/cAAA';Block header dump: 0x0541efdc
Object id on Block? Y
seg/obj: 0x127d4 csc: 0x0e.34006762 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x541efd9 ver: 0x01 opc: 0
inc: 0 exflg: 0当select * from emp where rowid='AAASfUAAVAAAe/cAAA'的时候oracle怎么从这个block 的信息上知道是这个block上哪个表对用的是emp呢。 因为data block只记录了data object id,在同一个cluster里的表data object id都是一样的;如果这样怎么能找到对应的行呢
rowid 一样, 但是SELECT 语句的语义是完全不同的, ORACLE的执行层可以知道到底要返回那部分的数据,这对用户是透明的
页:
[1]