我目前正在尝试执行1000多条更新语句,准备在Oracle数据库中将数据从一个表迁移到另一个表。
我有一个脚本,当前循环遍历将被更新的列影响的所有记录并打印出每个单独的更新语句...(例如下面)
<video>
我试图找到运行所有这些更新语句(或一些完全不同的方法)的最佳方法,而不必停止性能或将一组语句分组并以块的形式运行它们。 / p>
非常感谢任何帮助。
答案 0 :(得分:-1)
您可以尝试将其转换为大量的200个更新的匿名PL / SQL块,例如。
BEGIN
UPDATE F_ASSET SET ZONE = 'Green/EHNET' WHERE ID = 3;
-- 200 more updates
UPDATE F_ASSET SET ZONE = 'Green/EHNET' WHERE ID = 1319;
END;
BEGIN
UPDATE F_ASSET SET ZONE = 'Green/EHNET' WHERE ID = 1324;
-- 200 more updates
UPDATE F_ASSET SET ZONE = 'Green/EHNET' WHERE ID = 1329;
END;
200没什么特别的,但是太多,你会遇到一些限制。您可以手动编辑开始/结束 现在你只有5个语句要执行。非常难看但是,因为这是一次性的,它可能非常有效。之后洗手!
使用Toad窗口或TSR(Toad Script Runner),由于它的“每个语句”开销,这将为您带来10到100倍的性能提升。从用户数据在Excel中构建简单的插入/更新语句时,它非常有用。每个自尊的DBA都会讨厌/贬低它,因为它不是一个生产解决方案,但实际上只有一个,它只是有效。