我想在我的表更新所有的值,但是這可以殺死我的數據庫如何更新由字符串比較條件PL/SQL字符串值
UPDATE Table_1
SET Value = 'Some string with but changed'
where value = 'Some string without changes';
我可以用程序做到這一點,並保證它會不能在無限的情況下執行,我需要一些提示?
編輯
我讀到遊標,但我該如何使用它
我想在我的表更新所有的值,但是這可以殺死我的數據庫如何更新由字符串比較條件PL/SQL字符串值
UPDATE Table_1
SET Value = 'Some string with but changed'
where value = 'Some string without changes';
我可以用程序做到這一點,並保證它會不能在無限的情況下執行,我需要一些提示?
編輯
我讀到遊標,但我該如何使用它
如果你的數據庫是不是11克R1版本更高的另一種方法。 Oracle提供了一個漂亮的包,名爲DBMS_PARALLEL_EXECUTE,用於大型DMLS或任何可以拆分爲塊並且可以並行完成的進程。
我不認爲DBMS_PARALLEL_EXECUTE最適合在這種情況下,其中只有500行(值='沒有更改的某些字符串'超出2 mn)預計將被更新。 – pahariayogi
你的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
);
請詳細說明爲什麼您認爲'UPDATE'查詢可以「殺死」您的數據庫。 「殺」是什麼意思,你爲什麼會認爲它可以「無限地表演」? – MT0
我有近2百萬行,500的值='一些沒有改變的字符串'; –
And ...爲什麼'UPDATE'會殺死你的數據庫?它似乎是解決您的問題的完美解決方案,不會「殺死」數據庫也無法無限運行。 – MT0