about rowid

此博客转载自ITPUB博客,链接为http://blog.itpub.net/202861/viewspace-795660/ ,强调转载需注明出处,否则追究责任,但未提及Rowid具体信息技术内容。
對rowid的具體代表的意思不是很明白,所以找了找,找到了,貼出來以備後用.[@more@]本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(extended)的rowid: 1. rowid的介绍 先对rowid有个感官认识: SQL> select ROWID from Bruce_test where rownum<2 rowid ------------------ ---------- aaabnlaafaaaaapaaa oooooo fff bbbbbb rrr aaabnl aaa a-z> 0 - 25 (26) a-z 26 - 51 (26) 0-9 52 - 61 (10) +/ 62 - 63 (2) 共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下: d * (b ^ p) 其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数 比如:上面的例子 文件号AAF,具体的计算应该是: 5*(64^0)=5; 0*(64^1)=0; 0*(64^2)=0; 文件号就是0+0+5=5 刚才提到的是rowid的显示方式:基于64位编码的18个字符显示,其实rowid的存储方式是:10 个字节即80位存储,其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,由此,我们可以得出: 32bit的object number,每个数据库最多有4G个对象 10bit的file number,每个对象最多有1022个文件(2个文件预留) 22bit的block number,每个文件最多有4M个BLOCK 16bit的row number,每个BLOCK最多有64K个ROWS 2. rowid相关的有用的sql 最简单的基于rowid的显示方式得到的响应的64位编码对应值的sql: select rowid , substr(rowid,1,6) "OBJECT", substr(rowid,7,3) "FILE", substr(rowid,10,6) "BLOCK", substr(rowid,16,3) "ROW" from TableName; OWID OBJECT FILE BLOCK ROW ------------------ ------------ ------ ------------ ------ AAABc4AADAAAGLUAAA AAABc4 AAD AAAGLU AAA AAABc4AADAAAGLUAAB AAABc4 AAD AAAGLU AAB AAABc4AADAAAGLUAAC AAABc4 AAD AAAGLU AAC AAABc4AADAAAGLUAAD AAABc4 AAD AAAGLU AAD AAABc4AADAAAGLUAAE AAABc4 AAD AAAGLU AAE 通过dbms_rowid这个包,可以直接的得到具体的rowid包含的信息: select dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_id, dbms_rowid.rowid_block_number(rowid) block_id ,dbms_rowid.rowid_row_number(rowid) num from bruce_t where rownum<5 num ---------- ---------- ---------- ---------- create or replace function in return is begin return sql> select get_rowid(rowid), name from bruce_t; GET_ROWID(ROWID) NAME -------------------------------------------------------------------------------- -------------------------------- Object# is :5944 BruceLau Relative_fno is :3 Block number is :25300 Row number is :0 Object# is :5944 MabelTang Relative_fno is :3 Block number is :25300 Row number is :1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/202861/viewspace-795660/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/202861/viewspace-795660/

不是,我指的句柄是一个sqlite3类型的结构体啊,里面有如下内容struct sqlite3 { sqlite3_vfs *pVfs; /* OS Interface */ struct Vdbe *pVdbe; /* List of active virtual machines */ CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ sqlite3_mutex *mutex; /* Connection mutex */ Db *aDb; /* All backends */ int nDb; /* Number of backends currently in use */ int flags; /* Miscellaneous flags. See below */ i64 lastRowid; /* ROWID of most recent insert (see above) */ i64 szMmap; /* Default mmap_size setting */ unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ int iSysErrno; /* Errno value from last system error */ u16 dbOptFlags; /* Flags to enable/disable optimizations */ u8 enc; /* Text encoding */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ u8 bBenignMalloc; /* Do not require OOMs if true */ u8 dfltLockMode; /* Default locking-mode for attached dbs */ signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ u8 suppressErr; /* Do not issue error messages if true */ u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ u8 mTrace; /* zero or more SQLITE_TRACE flags */ u8 skipBtreeMutex; /* True if no shared-cache backends */ int nextPagesize; /* Pagesize after VACUUM if >0 */ u32 magic; /* Magic number for detect library misuse */ int nChange; /* Value returned by sqlite3_changes() */ int nTotalChange; /* Value returned by sqlite3_total_changes() */ int aLimit[SQLITE_N_LIMIT]; /* Limits */ int nMaxSorterMmap; /* Maximum size of regions mapped by sorter */ struct sqlite3InitInfo { /* Information used during initialization */ int newTnum; /* Rootpage of table being initialized */ u8 iDb; /* Which db file is being initialized */ u8 busy; /* TRUE if currently initializing */ u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ u8 imposterTable; /* Building an imposter table */ } init;这只是一小部分内容,通过句柄能否知道数据的起始位置
10-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值