2016-06-15 29 views
0

我想在我的表更新所有的值,但是這可以殺死我的數據庫如何更新由字符串比較條件PL/SQL字符串值

UPDATE Table_1 
SET Value = 'Some string with but changed' 
where value = 'Some string without changes'; 

我可以用程序做到這一點,並保證它會不能在無限的情況下執行,我需要一些提示?

編輯

我讀到遊標,但我該如何使用它

+0

請詳細說明爲什麼您認爲'UPDATE'查詢可以「殺死」您的數據庫。 「殺」是什麼意思,你爲什麼會認爲它可以「無限地表演」? – MT0

+0

我有近2百萬行,500的值='一些沒有改變的字符串'; –

+0

And ...爲什麼'UPDATE'會殺死你的數據庫?它似乎是解決您的問題的完美解決方案,不會「殺死」數據庫也無法無限運行。 – MT0

回答

0

如果你的數據庫是不是11克R1版本更高的另一種方法。 Oracle提供了一個漂亮的包,名爲DBMS_PARALLEL_EXECUTE,用於大型DMLS或任何可以拆分爲塊並且可以並行完成的進程。

+0

我不認爲DBMS_PARALLEL_EXECUTE最適合在這種情況下,其中只有500行(值='沒有更改的某些字符串'超出2 mn)預計將被更新。 – pahariayogi

2

你的SQL似乎罰款,這是首選的解決方案。光標通常會遠遠地慢得多。

如果您無法創建索引,並且上述更新確實很慢,請嘗試以下操作。考慮到我沒有表定義一起工作的,我假設你的主鍵是一個單場名爲ID:

首先,創建一個臨時表,只有符合條件的記錄:

CREATE TEMPORARY TABLE temp as 
    SELECT * 
    FROM Table_1 
    WHERE value = 'Some string without changes'; 

然後,更新使用該臨時表:

UPDATE Table_1 SET 
    Table_1.Value = 'Some string with but changed' 
WHERE EXISTS (
    SELECT * 
    FROM Temp 
    WHERE Temp.ID = Table_1.ID 
);