Проблема с хранимой процедурой

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Проблема с хранимой процедурой

Сообщение aleks26rus » 24 авг 2005, 17:34

Вобщем такая фигня: имеется сводная таблица(activ1) и таблица c
бухгалтерскими проводками(Jurnal). Имеется ХП которая с начала месяца по
текуший день отбирает проводки, суммирует и впихивает в сводную таблицу.
Последнее время кличество проводок растет немеренными темпами и к концу
месяца все это дело считается 4 часа (слишком долго).

Код: Выделить всё

CREATE PROCEDURE UPLACHENO3 (
    MONZ1 DATE
    )
AS
DECLARE VARIABLE PAB1 VARCHAR(6) CHARACTER SET WIN1251;
begin
  /* Procedure Text */
  for select    distinct(activ1.paba) from activ1
  where (activ1.tip_sch1 = 'T2' or activ1.tip_sch1 = 'L2' or activ1.tip_sch1
= 'L0')
  into :pab1
  do
  begin
  update activ1
  set activ1.uplach = (Select sum( "jurnal"."rub") from "jurnal"
                       where
                       ("jurnal"."date_op" >= :monz1)
                      and("jurnal"."deb13" like  '____'||:pab1||'%')
                      and (("jurnal"."kred" like '91604%') or
("jurnal"."kred" like  '70101%'))
                      and (("jurnal"."deb" like  '99999%') or
("jurnal"."deb" like  '40817%') or ("jurnal"."deb" like '40802%') or
("jurnal"."deb" like '40702%'))
                       )
  where activ1.paba = :pab1 and (activ1.tip_sch1 = 'T2' or activ1.tip_sch1 =
'L2' or activ1.tip_sch1 = 'L0')  ;

  end
  suspend;
end
Есть идея к текушему значению из сводной таблицы прибавлять сумму из
текушего дня, но к примеру если по данному человеку в текуший день проводок
небыло то число + null = null т.е. итоговый результат неверен.
Вот как бы проверить выражение (Select sum( "jurnal"."rub") from "jurnal"
where ........ ) на полученный результат и если = null оставить предыдушее
значение, если != null то суммировать и обновить.
Пробывал выражение (Select sum( "jurnal"."rub") from "jurnal" where
........ ) в отдельную процедуру(sumsj) выделить а потом вызывать её :
if sumsj('01.08.05', человек_из_сводной_таблицы(pab1) ) != null then .... не
получилось, ругается что мол процедура sumsj не определена. Хотя отдельно
sumsj работает на ура...
Вобшем подскажите глупому...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 авг 2005, 17:43

на sql.ru уже обсуждается.
http://www.sql.ru/forum/actualthread.aspx?tid=211063

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Re: Проблема с хранимой процедурой

Сообщение SAMZ » 25 авг 2005, 06:36

Попробуй чуть иначе построить процедуру. Во внешнем цикле вычислять сумму проводок с группировкой по полю deb13,
а во внутреннем цикле update active1 по соотношению полей deb13 и activ1.paba.
Ну, и как тебе уже подсказали конструкция if sumsj, где sumsj - процедура, не пройдет

aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Сообщение aleks26rus » 25 авг 2005, 09:27

kdv писал(а):на sql.ru уже обсуждается.
http://www.sql.ru/forum/actualthread.aspx?tid=211063
Кто "живет" там необязательно "живет" здесь и наоборот...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 авг 2005, 09:44

Кто "живет" там необязательно "живет" здесь и наоборот...
это тебе только кажется.

aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Сообщение aleks26rus » 25 авг 2005, 12:45

kdv писал(а):
Кто "живет" там необязательно "живет" здесь и наоборот...
это тебе только кажется.
Ты считаешь что мир так тесен ? :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 авг 2005, 15:06

Ты считаешь что мир так тесен ?
блин. не надо нарываться. Да, мир тесен. На forum.ibase.ru и sql.ru только кажется, что разные люди. На самом деле они одинаковые. Только ники разные. У меня и там и тут - ник один. Потому что я ТУТ РУЛЮ. И рулю настолько долго, что просто знаю, где какие люди есть. :twisted:

aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Сообщение aleks26rus » 25 авг 2005, 15:36

kdv писал(а):
Ты считаешь что мир так тесен ?
блин. не надо нарываться. Да, мир тесен. На forum.ibase.ru и sql.ru только кажется, что разные люди. На самом деле они одинаковые. Только ники разные. У меня и там и тут - ник один. Потому что я ТУТ РУЛЮ. И рулю настолько долго, что просто знаю, где какие люди есть. :twisted:
Чуствую щас Ded с канделябром выскачит....

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 авг 2005, 15:58

он то зачем выскочит? :)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 25 авг 2005, 16:23

kdv писал(а):он то зачем выскочит? :)


:twisted: :twisted: :twisted:

ЫЫЫЫЫЫЫЫЫЫЫЫЫ!!!!!!!!!!!!

Для страху. А там я оплошал с этим like '___'

aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Сообщение aleks26rus » 26 авг 2005, 15:05

Решение было надено, вначале считаю уплачено за день в tmp столбец, потом в этом столбце убираю null значения, а потом его сумирую к столбцу уплачено . короче малость через ж%у получилось, аш три процедуры вместо одной, + обнуление uplacheno ручками в начале месяца...

Ответить