Подскажите, как правильнее сделать массовую обработку данных в скрипте?

Alibek B.
Дата: 22.09.2015 13:02:28
Есть таблица, в которой пользователями заполняются данные (через веб-приложение).
Есть одно поле в таблице, в которую пользователи могут ввести предопределенный фиксированный текст, например "--------" (8 символов дефиса).
Раз в 5 минут запускается скрипт, который для подобных записей генерирует рандомную строку. Например так:
update ...
set CODE = to_char(dbms_random.value(1,99999999),'FM00000000')
where CODE = '--------'

Но затем мне нужно для этих измененных записей на клиенте сделать еще некоторые задачи, поэтому мне нужно знать, какие строки и как были обновлены.

Скорее всего оптимальным было бы использовать RETURNING INTO.
Но я не нахожу, как на клиент вернуть массив значений.

Другой способ - это выгрузить идентификаторы записей во временную таблицу и работать уже с ней:
insert into tmp(id)
select id from .. where CODE = '--------';

update ... set CODE=to_char(dbms_random.value(1,99999999),'FM00000000')
where ID in (select id from tmp);

...
select * from ... where id in (select id from tmp);
...

delete from tmp;

Он точно будет работать, но хотелось бы обойтись без лишних сущностей.

Не подскажите, как можно использовать первый способ из клиентского скрипта (Perl DBI)?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
Elic
Дата: 22.09.2015 13:18:30
Alibek B.
Но затем мне нужно для этих измененных записей на клиенте сделать еще некоторые задачи, поэтому мне нужно знать, какие строки и как были обновлены.
Про PL/SQL слышал?
Alibek B.
Дата: 22.09.2015 14:02:26
Elic
Про PL/SQL слышал?

PL/SQL не может сделать те вещи, которые у меня делает клиентский скрипт (например рассылает SMS).
Малх
Дата: 22.09.2015 14:06:20
Alibek B.,

Вам нужна новая сущность -- шаг обработки (или статус) и разбиение процесса на два шага, а именно:
1. Поставить код
2. Отправить SMS.
Alibek B.
Дата: 22.09.2015 15:27:47
Я бы не хотел усложнять без нужды.
У меня довольно простая задача - сгенерировать коды и разослать их получателям по SMS.
Создавать очередь с состояниями (если я правильно понял совет с шагами обработки) мне кажется избыточным.

Пока сделал третьим способом.
На скрипте выполняю
select id, to_char(dbms_random.value) as newcode from ... where code='--------'
, сохраняю в массив идентификаторы, затем в цикле построчно выполняю
update ... set code=:newcode where id=:id
и отправляю SMS.