簡體   English   中英

使用每行計算值的 where 子句進行大規模更新?

[英]Massive update with where clause with calculated value for each row?

我有一個有 400.000 行的表,我在上面添加了一個新列。 該表有一個索引 id,我想用我已經計算過的不同值更新每一行。 例如,我有如下更新語句:

UPDATE TABLE SET SECOND_NAME = 'Alfred' WHERE id = 510675;
UPDATE TABLE SET SECOND_NAME = 'Pedro' WHERE id = 123123;
UPDATE TABLE SET SECOND_NAME = 'Robert' WHERE id = 123123;

SECOND_NAME 是我要填充的新列,假設我有大約 400.000 條更新語句,有沒有辦法以更快的方式大規模更新它們? 如果沒有,有沒有辦法事先知道以這種方式更新它們需要多長時間?

我認為您最好的選擇可能是使用外部表。 這個 AskTom 答案基本上可以為您提供所需的一切: AskTom 但是,為您的問題定制它。 您可以獲取您擁有的信息,將其保存到 CSV 並按如下方式加載。

CREATE TABLE new_names (id NUMBER(10) PRIMARY KEY, second_name VARCHAR2(50))
ORGANIZATION EXTERNAL
(type oracle_loader
 default directory data_dir
 access parameters ( fields terminated by ',' )
 location ('names.csv')
)
/

UPDATE (SELECT t.second_name empty_name, n.second_name loaded_name
        FROM table_name t
        INNER JOIN new_names n ON t.id = n.id)
SET empty_name = loaded_name;
/

完成這項工作所需要做的就是創建目錄並將文件放入其中。 完成后,您可以刪除外部表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM