1. 程式人生 > >手動修改oracle資料

手動修改oracle資料

執行過for update的語句後須Commit。
For update那是一種行級鎖,一旦使用者對某個行施加了行級加鎖,則該使用者可以查詢也可以更新被加鎖的資料行,其它使用者只能查詢但不能更新被加鎖的資料行.如果其它使用者想更新該表中的資料行,則也必須對該表施加行級鎖.即使多個使用者對一個表均使用了共享更新,但也不允許兩個事務同時對一個表進行更新,真正對錶進行更新時,是以獨佔方式鎖表,一直到提交或復原該事務為止。行鎖永遠是獨佔方式鎖。
只有當出現如下之一的條件,便釋放共享更新鎖:
(1)、執行提交(COMMIT)語句;
(2)、退出資料庫(LOG OFF)
(3)、程式停止執行。
①開啟PL/SQL管理工具,以便執行查詢語句及修改資訊。

②編寫表的查詢語句及條件,然後加上"FOR UPDATE","FOR UPDATE"是獲得OACLE的修改許可權,執行這條查詢語句,查詢出對應的記錄
如:SELECT T.ROWID, T.LAST_NAME_CN, T.FIRST_NAME_CN
  FROM TABLE_CESHI T
 WHERE T.LAST_NAME_CN = '朱'
   AND T.FIRST_NAME_CN LIKE '%娜%'
   FOR UPDATE;
③點選記錄列表上面的鎖狀形圖示,圖案顯示為開鎖狀態,說明已經獲得手動操作的許可權。
④然後修改列表中的某條或某些資料,如:將下面的"FIRST_NAME_CN"中的"娜娜"修改為"娜"。
⑤修改完成後,點選列表上面的對號圖示提交,點選完成後對號圖示已變成不可點選的灰色。


⑥最後再次點選列表上面的鎖狀形的圖示,關閉手動修改資料的許可權。

⑦提交事務Commit。


另注:1. 在ORACLE中用ROWID來定位記錄是最快的,比索引還快,所以如果先用SELECT ROWID選出要更新的行,放入COLLECTION中,再用 FORALL UPDATE 來批量更新可以提高速度。從這點來講是比其他方法好一點
2. SELECT FOR UPDATE在更新前會鎖定記錄,這在複雜的並行查詢更新程式中是必要的,比如要求資料一致性,在過濾資料時不允許他人改動資料,會用FOR UPDATE或SET TRANSACTION READ ONLY來加鎖。另外像 CURSOR裡的WHERE CURRENT OF CURSOR語句要求SELECT中必須加FOR UPDATE.
for update:當語句執行時,會在對應行(where子句)加上行級鎖,無where子句等於全表上鎖。若遇到客戶端斷網、測試人員忘記提交\回滾事務,則會發生鎖表。 
rowid: 執行後並未給資料加上行級鎖(通過實體地址去確定某一行資料),但可以編輯資料,提交事務的瞬間完成上鎖、提交、解鎖等動作,不易發生鎖表。

希望對你有幫助,祝你有一個好心情,加油!

若有錯誤、不全、可優化的點,歡迎糾正與補充!