2010-11-15 20 views
1

我必須爲表格計劃轉換。表結構是一樣的東西大量行的轉換

COULMN1 CHAR(1) 
COLUMN2 VARCHAR2(20) 
COLUMN3 DATE 

我需要此錶轉換根據以下邏輯:

  • IF COLUMN2 = 'XXX' 然後更新COLUMN1 = 'X'

的要更新的行數很大(以百萬爲單位)。所以,我無法做出簡單的更新聲明,因爲我有限的時間來執行此活動。 到目前爲止,我有一個想法來創建一個具有轉換值的臨時表;刪除主表並用原始表重命名臨時表。

是否有任何身體有任何不同的想法?

回答

0

我不是數據庫專家&這是我的想法。

帶有XXX的行比其他行更多嗎?
如果是這樣,請創建一個表以轉儲XXX行並將列1設置爲X.
插入不是XXX的其餘行。
截斷舊錶。
在新表格中插入新內容。

DB專家可以批評/評論這種方法。

2

你可以嘗試做他們一點的時間,例如: -

UPDATE atable 
SET column1 = 'X' 
WHERE (column1 != 'X' OR column1 IS NULL) 
AND column2 = 'XXX' 
AND ROWNUM <= 100000; 

這將更新前100,000列的必要。將數字更改爲品味。提交,沖洗並重復,直到它顯示「0行已更新」。

0

如果用戶想在轉換過程中看到新數據,可以使用視圖。

重命名您的表,例如[table_old],並創建一個將更新值複製到的新表[table_new]。使用table [table]的原始名稱創建一個視圖,該表格返回[table_new]的所有行和[table_old]中的所有行,而不是[table_new]中的所有行。

一旦所有的數據已被轉換,刪除舊錶和視圖,然後將[table_new]重命名爲原始表名稱。

希望這是一個明確的描述!