2011-12-24 6 views
1

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

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

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

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

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

+1

Поскольку оракул 10g есть предложение RETURNING для статусов обновления, но я уверен, что они могут использоваться для более чем одной строки. –

ответ

5

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

+0

Спасибо, выглядит аккуратно. Любые идеи о том, как использовать iBatis/myBatis? – SiN

+0

Все еще не удается найти способ связи BULK COLLECT с JDBC – SiN

Смежные вопросы