Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 12:46
Прошу помощи.
Написал ХП но она почему-то не работает.
Бьюсь уже 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;
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 12:56
Не работает - понятие растяжимое.
Что конкретно не так? И как должно быть?
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 12:58
нету результата.
должна обновляться таблица price2 колонка sells.
а там нули, хотя если делать только селект
то выборка далеко не пустая
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 14:19
select * from PRICE2UPDTSELLS (...)
что-нибудь возвращает?
кстати там suspend пропущен.
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 14:30
vtovar_kod <null>
vsum <null>
возвращает
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 15:07
это уже при вставленном суспенде?
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 15:19
А как происходит вызов процедуры?
(непосредственно участок кода с передачей параметров)
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 15:23
ну я пока запускаю из-под ibeexpert .
даты запрашивает перед выполнением.
транзакцию подтверждаю.
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 15:33
А что он говорит на вкладке анализ производительности?
действительно нет чтений?
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 15:34
------ 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
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 15:41
немного не то.
там вкладка есть красивая в редакторе запросов, с графиками и количеством операций по каждой таблице.
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 15:56
есть график только на чтение из протокола ~ 350 000
а на обновление пусто - 0
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 16:28
Это оригинально.
Надо полагать индекса по dateadd тут нет.
А данные то точно есть на этот промежуток?
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 16:49
с типом 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 ?
-
mdfv
- Сообщения: 119
- Зарегистрирован: 23 май 2006, 15:53
Сообщение
mdfv » 03 янв 2008, 17:00
как вариант могу предположить что
порядок параметров не тот и про это забыто
d2 timestamp,
d1 timestamp)
а в запросе правильно
where T.dateadd between d1 and d2
-
Mironico
- Сообщения: 81
- Зарегистрирован: 17 янв 2007, 12:23
Сообщение
Mironico » 03 янв 2008, 17:29
Мать его за ногу!
Точно!
Ну спасибо добрый Человек!
ФУФ!