我一直在努力提高存储过程的性能,并且由于必须运行四个非常类似的更新而出现了很大的减速。如何在Oracle中组合多个更新语句?
我在MySql中发现了类似麻烦的信息,这有帮助,但我无法实现我学到的东西,也许Oracle的运行方式不同。
我尝试过的东西包括:通过合并批量插入,创建辅助temp_table和根本没有临时表,但没有任何改进。
作为Oracle的新手,完全有可能我只是以错误的方式去做。
任何建议或答案或指导的答案将大大apreciated,因为我已经用尽了想法,现在只用蛮力和无知工作。
UPDATE TEMP_TABLE TI SET T.ItemPrice_One =
(
SELECT ItemPrice
FROM Temp.View_Items V
WHERE V.Item_Name = 'Item_Name_One'
AND V.ID = T.ID
AND V.Date = T.Date
);
UPDATE TEMP_TABLE TI SET T.ItemPrice_Two =
(
SELECT ItemPrice
FROM Temp.View_Items V
WHERE V.Item_Name = 'Item_Name_Two'
AND V.ID = T.ID
AND V.Date = T.Date
);
UPDATE TEMP_TABLE TI SET T.ItemPrice_Three =
(
SELECT ItemPrice
FROM Temp.View_Items V
WHERE V.Item_Name = 'Item_Name_Three'
AND V.ID = T.ID
AND V.Date = T.Date
);
你真的想更新每个UPDATE语句的每一行TEMP_TABLE吗? (因为这是你的每一个更新将做什么)。我有点困惑,你想更新的主表是什么? – tbone 2012-02-06 19:08:06
您可以将这三个更新轻松地组合到一个更新中。这是个问题吗? – 2012-02-06 19:21:10
谢谢大家闪电般的快速回应。我会尽力澄清它的目的。 Temp_Table通常很小,可以从2行到200之间的任何地方。如果ID和日期与更大的视图相匹配,那么该行中的相应列将被更新。 – dee 2012-02-06 19:38:29