Страница 1 из 1

Не работает хранимая процедура.

Добавлено: 03 янв 2008, 12:46
Mironico
Прошу помощи.
Написал ХП но она почему-то не работает.
Бьюсь уже 2 день, голова пухнет.
Гляньте пож трезвым взглядом, может подскажете.
Ошибок в тексте не обнаружено.
Может быть что проблема в моей неопытности.

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

SET TERM ^ ;

CREATE PROCEDURE PRICE2UPDTSELLS (
    d2 timestamp,
    d1 timestamp)
returns (
    vtovar_kod integer,
    vsum double precision)
as
begin
        for SELECT T.TOVAR_KOD, SUM( T.KOLVO )
                 FROM protocol_arch T
                 where T.dateadd between :D1 and :D2
                 group by T.TOVAR_KOD
                 into :vtovar_kod, :vsum
        do
        begin
            update PRICE2 P2
            set P2.sells=:vsum where p2.tovar_kod=:vtovar_kod;
        end
        exit;
end^

SET TERM ; ^

GRANT SELECT ON PROTOCOL_ARCH TO PROCEDURE PRICE2UPDTSELLS;

GRANT SELECT,UPDATE ON PRICE2 TO PROCEDURE PRICE2UPDTSELLS;

GRANT EXECUTE ON PROCEDURE PRICE2UPDTSELLS TO SYSDBA;

Добавлено: 03 янв 2008, 12:56
mdfv
Не работает - понятие растяжимое.
Что конкретно не так? И как должно быть?

Добавлено: 03 янв 2008, 12:58
Mironico
нету результата.
должна обновляться таблица price2 колонка sells.
а там нули, хотя если делать только селект
то выборка далеко не пустая

Добавлено: 03 янв 2008, 14:19
mdfv
select * from PRICE2UPDTSELLS (...)
что-нибудь возвращает?
кстати там suspend пропущен.

Добавлено: 03 янв 2008, 14:30
Mironico
vtovar_kod <null>
vsum <null>
возвращает

Добавлено: 03 янв 2008, 15:07
mdfv
это уже при вставленном суспенде?

Добавлено: 03 янв 2008, 15:12
Mironico
да

Добавлено: 03 янв 2008, 15:19
mdfv
А как происходит вызов процедуры?
(непосредственно участок кода с передачей параметров)

Добавлено: 03 янв 2008, 15:23
Mironico
ну я пока запускаю из-под ibeexpert .
даты запрашивает перед выполнением.
транзакцию подтверждаю.

Добавлено: 03 янв 2008, 15:33
mdfv
А что он говорит на вкладке анализ производительности?
действительно нет чтений?

Добавлено: 03 янв 2008, 15:34
Mironico
------ Performance info ------
Prepare time = 0ms
Execute time = 6s 250ms
Avg fetch time = 6 250,00 ms
Current memory = 1 183 832
Max memory = 1 316 368
Memory buffers = 2 048
Reads from disk to cache = 155 578
Writes from cache to disk = 0
Fetches from cache = 1 050 245

Добавлено: 03 янв 2008, 15:41
mdfv
немного не то.
там вкладка есть красивая в редакторе запросов, с графиками и количеством операций по каждой таблице.

Добавлено: 03 янв 2008, 15:56
Mironico
есть график только на чтение из протокола ~ 350 000
а на обновление пусто - 0

Добавлено: 03 янв 2008, 16:28
mdfv
Это оригинально.
Надо полагать индекса по dateadd тут нет.

А данные то точно есть на этот промежуток?

Добавлено: 03 янв 2008, 16:36
Mironico
данные есть 100%

Добавлено: 03 янв 2008, 16:49
mdfv
с типом timestamp и не такое бывает.
при этом вы утверждаете что отдельно тот же запрос с теми же параметрами возвращает данные?

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

SELECT T.TOVAR_KOD, SUM( T.KOLVO )
FROM protocol_arch T
where T.dateadd between d1 and d2
group by T.TOVAR_KOD 
dateadd имеет тип timestamp ?

Добавлено: 03 янв 2008, 16:51
Mironico
да, возвращает

Добавлено: 03 янв 2008, 16:51
Mironico
да timestamp

Добавлено: 03 янв 2008, 17:00
mdfv
как вариант могу предположить что
порядок параметров не тот и про это забыто
d2 timestamp,
d1 timestamp)
а в запросе правильно
where T.dateadd between d1 and d2

Добавлено: 03 янв 2008, 17:29
Mironico
Мать его за ногу!
Точно!
Ну спасибо добрый Человек!
ФУФ! :oops: