![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странно необъяснимое поведение хранимой процедуры в Фаерберде ...
Rule © (2005-02-17 12:23:00)При выполнении хранимой процедуры выдает неправильные результаты, а в режиме отладки выдает правильные результаты, до этого встречался с такой проблеммой ... и решил её путем преставления срок кода, причем это переставление логики никакой не меняло вообще ... опять столкнулся с такойже проблеммой ... что делать, чего посоветуете ?
Rule (2005-02-17 15:42:00) [1]Deniz (17.02.05 15:33) [38]
кстати да, присоединяюсь к вопросу ...
Rule (2005-02-17 15:40:00) [2]Johnmen © (17.02.05 15:18) [37]
огромное спасибо за подсказку
Rule (2005-02-17 15:39:00) [3]Johnmen © (17.02.05 15:18) [37]
понял ... всё понятно
Deniz (2005-02-17 15:33:00) [4]>Johnmen
А смысл выполнять каждый раз подзапрос, если в основном мы сразу отбираем по a.id_fuel=:idfuel, т.е. в главном запросе в a.id_fuel всегда будет одно значение и соот-но в подзапрос будет передаваться только одно значение?
И в этом случае накладные расходы на сервере меньше и результат должен быть одинаковый.
Johnmen (2005-02-17 15:18:00) [5]>Rule © (17.02.05 14:04) [33]
>подзапрос я понял это типа
Да.
>а почему у меня один раз
Потому, что в подзапросе нет никаких ссылок на основной...
Rule (2005-02-17 15:09:00) [6]Deniz (17.02.05 14:39) [35]
ну оно все получилось как посоветовал
Johnmen © (17.02.05 12:53) [15]
а на пустой базе позже проверю, уже для интереса, хотя мне кажется что результат тотже
Deniz (2005-02-17 14:39:00) [7]>Rule © (17.02.05 14:04) [34]
А попробуй сам на пустой базе скрипт запустить и потом посмотреть на результаты работы процедуры
Rule (2005-02-17 14:04:00) [8]Deniz (17.02.05 13:38) [30]
хм ... интересно ...а у меня при вызове то что я написал выше ...
Rule (2005-02-17 14:04:00) [9]Johnmen © (17.02.05 13:47) [32]
понятно, спасибо за разьяснение ...
подзапрос я понял это типа
and a.adatime=(select max(b.adatime) from pricefuel b
where b.id_fuel=a.id_fuel)
а почему у меня один раз ... должно же быть под каждую запись отдельно, и почему в пошаге выполняется как надо ?
Johnmen (2005-02-17 13:47:00) [10]>Rule © (17.02.05 13:28) [25]
>а можно поинтересоваться почему тут возникает такая непонятка,
>хотелось бы объяснить такое поведение ...
Вобщем, твой запрос и тот, который я привел, не эквивалентны.
Мною приведенный точно отвечает трубуемым условиям, не зависимо от данных, которые в таблицах. Твой - зависит.
Мне сложно обьяснить это на бумаге... Могу только голосом...:)
PS
Один из моментов - подзапрос в твоём варианте выполняется 1 раз, в моём - на каждую запись основного.
Deniz (2005-02-17 13:40:00) [11]>Rule © (17.02.05 13:36) [29]
Сори это я вопрос неправильно прочитал, все правильно только 1 запись
Deniz (2005-02-17 13:38:00) [12]Оно так и выдает и при вызове и пошагово
IDFUEL NAME PRICE ADATIME
10001 1,15 07.02.2005 21:55:22
10002 1,2 07.02.2005 21:55:45
10003 1,3 03.02.2005 16:29:30
10004 1,45 03.02.2005 16:58:32
Name не заполнил
Rule (2005-02-17 13:36:00) [13]Deniz (17.02.05 13:28) [26]
нет, по логике эти запросы выбирают последнюю запись по дате определенного вида топлива и номера цены (0 - это стелловская цена, тоесть базовая)
Rule (2005-02-17 13:33:00) [14]Johnmen © (17.02.05 13:24) [23]
Не может быть.
И ещё один момент - эти запросы должны возвращать ЕДИНСТВЕННУЮ запись...
возвращают, это понятно иначе будет ругаться мультиплай ин чегототам селект :)
огромное спасибо :-)
Rule (2005-02-17 13:32:00) [15]Deniz (17.02.05 13:27) [24]
получались такие результаты
IDFUEL NAME PRICE ADATIME
10 001 ДП 1,15 07.02.2005 21:55
10 002 А-76 1,15 07.02.2005 21:55
10 003 А-92 1,15 07.02.2005 21:55
10 004 А-95 1,15 07.02.2005 21:55
а надо было вот такие :
IDFUEL NAME PRICE ADATIME
10 001 ДП 1,15 07.02.2005 21:55
10 002 А-76 1,2 07.02.2005 21:55
10 003 А-92 1,3 03.02.2005 16:29
10 004 А-95 1,45 03.02.2005 16:58
причем неправильные резульатты выдавались только при нелевом входном параметре
Deniz (2005-02-17 13:28:00) [16]>Johnmen © (17.02.05 13:24) [23]
Нет по кол-ву записей в fuel, в данном примере 4
Rule (2005-02-17 13:28:00) [17]Johnmen © (17.02.05 12:53) [15]
ХАААА, вруу, точно заработало .....
а можно поинтересоваться почему тут возникает такая непонятка, хотелось бы объяснить такое поведение ...
Deniz (2005-02-17 13:27:00) [18]Так ты покажи что получаешь в неправильном варианте, а что хочешь получить
Johnmen (2005-02-17 13:24:00) [19]>Rule © (17.02.05 13:19) [20]
>так вообще не работает ...
Не может быть.
И ещё один момент - эти запросы должны возвращать ЕДИНСТВЕННУЮ запись...
Rule (2005-02-17 13:22:00) [20]Deniz (17.02.05 13:06) [16]
а ты данные вствил те что у меня, если да, то у тебя по нулевой цене должно возвращать 1.15 на все виды топлива ...