Выберите и обновите в том же запросе PL / SQL - PullRequest
1 голос
/ 24 декабря 2011

У меня есть поток производителя в Java, извлекающий элементы из таблицы Oracle каждые n миллисекунд. Текущая реализация опирается на временную метку Java для извлечения данных и их повторного извлечения.

Моя цель - избавиться от шаблона метки времени и напрямую обновить те же элементы, которые я извлекаю из базы данных.

Есть ли способ ВЫБРАТЬ набор предметов и ОБНОВЛЯТЬ их одновременно, чтобы пометить их как «Обрабатываемые»?

Если нет, то будет ли отдельный запрос UPDATE, основанный на предложении IN, серьезным ударом по производительности? Я попытался использовать временную таблицу для этой цели, но я видел, что производительность сильно пострадала.

Не знаю, поможет ли это, но приложение использует iBatis.

1 Ответ

5 голосов
/ 25 декабря 2011

Если вы используете oracle 10g или выше, вы можете использовать предложение RETURNING оператора update.Если вы хотите получить более одной строки, вы можете использовать инструкцию BULK COLLECT.
Вот ссылка на некоторые примеры;http://psoug.org/snippet/UPDATE-with-RETURNING-clause_604.htm

...