Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] скрипт для PostgreSQL (http://forum.oszone.net/showthread.php?t=213123)

cobra2029 12-08-2011 12:52 1730467

скрипт для PostgreSQL
 
Здравствуйте!
У меня есть следующий вопрос:
как реализовать скрипт, основной задачей которого, будет:
1. поиск наибольшего значения (А) в таблице ind, столбце (index_1).
2. сохранение значения А в таблице ind, столбце (index_1). (так формируется значение В)
3. ожидание 30 минут.
4.поиск наибольшего значения (А) в таблице ind, столбце (index_1).
5. сравнение значения А и В: если А=В то
удалить значения А и В из обоих таблиц
если А не равно В
перейти к пункту 1.


Решить задачу своими силами не смог.
Поиск по форуму юзал, подобной проблемы не нашел.
вот раздробленные части которые написал сам используя справочники и форум:

Код:

--<X>
:Setvar X = select max(idx)as max_idx
from rs_taxgrouptotalsitem

insert into work_dpe (idx)
select ide
from rs_taxgrouptotalsitem
where X
time out/ -t 3600

:Setvar Y = select max(idx)as max_idx
from rs_taxgrouptotalsitem

if X=Y then

DELETE FROM rs_taxgrouptotalsitem , work_dpe
 WHERE idx = X ;
 
 --else  go to X
 end if

P.S. знаю, что синтаксис ужасно не правильный, я только учусь поэтому "камнями" не закидывать и не флудить.
Спасибо за помощь.

Delirium 13-08-2011 15:44 1731078

PostgreSQL вообще никогда не использовал, поэтому встречный вопрос - в нем есть планировщик, позволяющий выполнять задачу по расписанию? Если да, то это условие надо убрать из скрипта. Далее, можно попробовать использовать примерно такой скрипт(пишу по памяти, возможны ошибки):

1. Смотрим количество максимальных значений.
Код:

:Setvar Max_count = select count(idx) as max_idx from rs_taxgrouptotalsitem
having idx = max(idx)
group by idx

2. Запоминаем максимальное значение
Код:

:Setvar Max_num = select max(idx) from rs_taxgrouptotalsitem
3. Если максимальных значений больше или равно2(т.е. это случай, если мы уже находили макс. значение и вставляли его), то удаляем их.
Код:

if Max_count >=2 then
DELETE FROM rs_taxgrouptotalsitem , work_dpe
 WHERE idx = Max_num ;

4. Если же значение одно, то вставляем его в таблицу
Код:

if Max_count =1 then
insert into work_dpe (idx) values (Max_num);

Все это дело в планировщик каждые 30 минут.
Запускаем. Код ищет количество макс. значений. Т.к. он ни разу еще не работал и в таблице нет двух макс. значений, то код идет на вставку макс. значения в таблицу и заканчивает работу. Через 30 минут запускается, видит, что максимальных значений 2 и удаляет их, после чего заканчивает работу.Если же макс. значений всего одно, то он вставляет его дубль. В след. раз если он опять найдет 1 макс. значение, то продублирует его. Как то как вроде бы.

cobra2029 16-08-2011 16:48 1733192

спасибо помогло

Delirium 16-08-2011 18:45 1733272

Для спасибо есть кнопочка "Полезное сообщение" под каждым сообщением :) Всегда рады помочь.


Время: 22:00.

Время: 22:00.
© OSzone.net 2001-