程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 將Oracle中的數據更改後出錯的解決方法

將Oracle中的數據更改後出錯的解決方法

編輯:Oracle數據庫基礎

要想改正錯誤,首先要先分析錯誤,下面我們就先來分析分析問題是怎樣的。

問題是這樣的:

我們給系統創建了兩個用戶:com和comtest。前者存放的是正式庫數據,後者存放的測試庫數據。它們都有一個taw_rm_user表,存放了使用該系統的用戶基本信息,我就是把其中的passWord字段全部改成了123456。

DMP備份文件是9月28號創建的,經過十一七天長假後到今天,已經有十幾天了,我簡單的查了一下日志,發現已經創建了幾個新的用戶,並且有些舊的用戶的其他信息也已經更改了。直接把備份文件中的taw_rm_user表導入com用戶下是肯定不行的。經過一段時間的冷靜思考後,得到了一個解決方案。

大致思路是:

1. 將測試庫的taw_rm_user表用CREATE TABLE AS語句導到一個臨時的備份表中(測試庫中的用戶表也不能亂改);

2. 再將taw_rm_user表刪除;

3. 然後將DMP備份文件的taw_rm_user表用IMP命令導入到comtest下;

4. 再自己編寫一個PL/SQL程序塊,通過使用游標循環,將這個新導入的表中的passWord字段更新到com.taw_rm_user表的對應記錄中。注意,這裡只更新對應記錄,對新加入的用戶記錄不作任何修改;

5. 再將之前備份的taw_rm_user表恢復到comtest下即可。

其中使用的兩段關鍵語句如下

-- 備份測試庫中的taw_rm_user表

create table comtest.taw_rm_user_bak
as
select * from comtest.taw_rm_user

-- 恢復正式庫中的taw_rm_user.passWord字段

declare
rec_comtest comtest.taw_rm_user%rowtype;
cursor cur_comtest is
select * from comtest.taw_rm_user;
begin
open cur_comtest;
loop
fetch cur_comtest into rec_comtest;
exit when cur_comtest%notfound;
update com.taw_rm_user
set com.taw_rm_user.password=rec_comtest.passWord
where com.taw_rm_user.user_id=rec_comtest.user_id;
end loop;
close cur_comtest;
commit;
end;

這樣就可以在不更改其他所有信息的情況下,將所有舊用戶的密碼恢復到從前。希望上文中講到的內容能夠幫到大家。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved