oracle中的rowid使用及說明
oracle中的rowid
oracle數(shù)據(jù)庫的表中的每一行數(shù)據(jù)都有一個唯一的標(biāo)識符,或者稱為rowid,在oracle內(nèi)部通常就是使用它來訪問數(shù)據(jù)的。
rowid需要 10個字節(jié)的存儲空間,并用18個字符來顯示。
該值表明了該行在oracle數(shù)據(jù)庫中的物理具體位置??梢栽谝粋€查詢中使用rowid來表明查詢結(jié)果中包含該值。

AAAR1yAAHAAAAFkAAA為例
這里的AAAR1y是數(shù)據(jù)庫對象編號,AAH是文件標(biāo)號,AAAAFk是塊編號,最后三位AAA是行編號。
使用select * from DEPT;
輸出結(jié)果中是不能看到rowid這里一列的,這是因?yàn)檫@一列只在數(shù)據(jù)庫內(nèi)部使用,rowid通常被稱為一個偽列。

如果想選擇
scott.emp的數(shù)據(jù)后進(jìn)行手工修改,則必須使
select rowid,t.* from scott.emp t;
而不能直接寫成
select * from emp; select rowid,t.* from scott.emp t; select * from scott.emp for update;
在ORACLE中用ROWID來定位記錄是最快的,比索引還快,所以如果先用SELECT ROWID選出要更新的行,放入COLLECTION中,再用 FORALL UPDATE 來批量更新可以提高速度。從這點(diǎn)來講是比其他方法好一點(diǎn)
SELECT FOR UPDATE在更新前會鎖定記錄,這在復(fù)雜的并行查詢更新程序中是必要的,比如要求數(shù)據(jù)一致性,在過濾數(shù)據(jù)時不允許他人改動數(shù)據(jù),會用FOR UPDATE或SET TRANSACTION READ ONLY來加鎖。
另外像 CURSOR里的WHERE CURRENT OF CURSOR語句要求SELECT中必須加FOR UPDATE.
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle數(shù)據(jù)庫AWR報告的生成步驟與分析方法
本文介紹了在Oracle數(shù)據(jù)庫中生成AWR報告的基本步驟和方法,以及分析AWR報告的五步法:1 看整體負(fù)載;2 查看等待事件;3 了解SQL統(tǒng)計;4 調(diào)查時間模型;5 分析操作系統(tǒng)和內(nèi)存,需要的朋友可以參考下2026-04-04
給Oracle添加split和splitstr函數(shù)的方法
最近項(xiàng)目中有很多需要做批量操作的需求,客戶端把一組逗號分隔的ID字符串傳給數(shù)據(jù)庫,存儲過程就需要把它們分割,然后逐個處理2012-11-11
SQL?錯誤?[1722]?[42000]:?ORA-01722:?無效數(shù)字解決辦法
這篇文章主要給大家介紹了關(guān)于SQL?錯誤?[1722]?[42000]:?ORA-01722:?無效數(shù)字的解決辦法,ORA-01722是一個錯誤代碼,當(dāng)試圖將一個字符串轉(zhuǎn)換為數(shù)字,但字符串無法轉(zhuǎn)換為數(shù)字時會出現(xiàn)這個錯誤,需要的朋友可以參考下2024-06-06
Orace查詢數(shù)據(jù)出現(xiàn)亂碼的問題解決思路
經(jīng)常有些朋友會遇到,我明明是輸入的正確中文,為什么我在另外一臺電腦上查詢卻出現(xiàn)亂碼啦?其實(shí)這個是數(shù)據(jù)庫在進(jìn)行字符集轉(zhuǎn)換的時候出現(xiàn)了問題,本文介紹解決方法,需要了解的朋友可以參考下2013-01-01
Oracle?EBS數(shù)據(jù)庫密碼復(fù)雜度設(shè)置圖文教程
選擇安全的密碼并實(shí)施良好的密碼策略是迄今為止防止基于密碼的安全威脅的極為重要的防御措施,下面這篇文章主要給大家介紹了關(guān)于Oracle?EBS數(shù)據(jù)庫密碼復(fù)雜度設(shè)置的相關(guān)資料,需要的朋友可以參考下2024-04-04
oracle bbed恢復(fù)刪除數(shù)據(jù)實(shí)例
在oracle中bbed恢復(fù)刪除數(shù)據(jù)實(shí)例2013-11-11

