0
У меня есть запрос обновленияPaging обновление Oracle запрос
UPDATE tablename
set column1 = 'value1', column2= 'value2', column3= 'value3'
where column4 = 'value4
Мне нужно заявление выше модифицируют для:
- фиксации каждые 5000 записей
- остановку после того, как в общей сложности 500000 строк есть был обновлен.
Возможно ли это в oracle11g? Как мы можем достичь этого?
Написал процедуру SQL:
DECLARE
fromCount number(10) := 0;
toCount number(10) := 0;
BEGIN
LOOP
toCount := fromCount + 5000;
UPDATE tablename
set column1 = 'value1', column2= 'value2', column3= 'value3'
where column4 = 'value4 AND ROWNUM > fromCount AND ROWNUM < toCount;
COMMIT;
IF toCount=500000 THEN
EXIT;
END IF;
END LOOP;
END;
Это берет более чем на 1 час, чтобы выполнить его. Как я могу улучшить его производительность?
Используйте для этого хранимую процедуру. –
Заявление является атомарным, оно должно либо полностью преуспеть, либо полностью потерпеть неудачу. Для одного оператора SQL не было бы смысла совершать каждые 5000 строк. Вы могли бы написать PL/SQL, который повторялся над строками, которые вы хотите обновить, и включал промежуточные коммиты, но это почти всегда ошибка. Это замедляет ваш процесс, что усложняет его работу, требует, чтобы вы выполняли много домашних операций, чтобы сделать процесс перезагруженным и т. Д. Почему вы хотите это сделать, а не просто позволить Oracle обновить все строки, которые вы хотите обновить одним выстрелом? –
Что относительно концепции LIMIT и OFFSET? Можем ли мы использовать это для его достижения? Я не знаю много об этом – user1653773