Спасибо, эту статью я читал. Только не пойму, как она может мне помочь? Во-первых, я спрашивал про SQL запрос, а не процедуру. А во вторых, цикл FOR все равно работает медленно.
Например, только что сделал тест: таблица с тремя INTEGER полями A, B, C из первого сообщения, 100 000 записей с A=1, B=1,2,3,..., C=1, 100 000 записей с A=2, B=1,2,3..., C=NULL. Так вот запрос UPDATE из первого сообщения выполняется 2.5 с, процедура ниже выполняется 3.8 с. Процедура написана по стопам указанной выше статьи. Цифры для теста взял не случайно. В моих реальных таблицах несколько раз по 500 000 записей.
Код: Выделить всё
CREATE PROCEDURE PROCEDURE_2
AS
DECLARE VARIABLE B INTEGER;
DECLARE VARIABLE C INTEGER;
BEGIN
FOR
SELECT B, C FROM TABLE_1 WHERE A=1 INTO :B, :C
DO
UPDATE TABLE_1 SET C=:C WHERE A=2 AND B=:B;
END
Получается, что запрос UPDATE из первого сообщения самый быстрый. И что, быстрее сделать никак? И кроме того, я так и не понял, чем плох этот запрос?