powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выбор варианта для ХП..
6 сообщений из 6, страница 1 из 1
Выбор варианта для ХП..
    #32660192
Matt Juntunen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Подскажите, какой вариант правильнее с точки зрения "процедурописания" для FB 1.0?
(Процедура выводит список товаров + кол-во из журнала операции с товарами. Пример упрощен.)
Так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Create PROCEDURE TEST 
RETURNS (
    ID INTEGER,
    NAME VARCHAR( 45 ) CHARACTER SET WIN1251,
    KOLVO INTEGER)
AS
begin
For Select Tov_ID, Tov_Name,(Select SUM(OT_KOLVO) From OPER_Tov Where TOV_NO = Tovar.Tov_ID)
 From Tovar
 Into :ID, :Name, :Kolvo
Do
 begin
  If (Kolvo Is Null) Then Kolvo =  0 ;
  Suspend;
 end /*Do*/ 
end

или так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Create PROCEDURE TEST 
RETURNS (
    ID INTEGER,
    NAME VARCHAR( 45 ) CHARACTER SET WIN1251,
    KOLVO INTEGER)
AS
begin
For Select Tov_ID, Tov_Name
 From Tovar
 Into :ID, :Name
Do
 begin
  Select SUM(OT_Kolvo)
   From OPER_TOV
   Where Tov_No = :ID
   Into :Kolvo;
  If (Kolvo Is Null) Then Kolvo =  0 ;
  Suspend;
 end /*Do*/ 
end

P.S. Как в IBExpert получить пла выполнения ХП?
...
Рейтинг: 0 / 0
Выбор варианта для ХП..
    #32660476
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильность я бы рассматривал с точки зрения времени выполнения запроса. На мой взгляд запросы выполняться будут одинаковое время, но первый запрос более структурированее что ли... Лучше Вам ответят более опытные форумцы ;)

авторP.S. Как в IBExpert получить пла выполнения ХП?
На вкладке для ХП "Анализ плана", а после выполнения "Анализ производительности"
...
Рейтинг: 0 / 0
Выбор варианта для ХП..
    #32660675
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню точно, но каэется Case появилась в 1.5
В этом упрошенном варианте, вообще можно обойтись без ХП - одним селектом.

Код: plaintext
1.
Select Tov_ID, Tov_Name,(Select SUM(case (when OT_KOLVO IS NULL THEN  0  ELSE OT_KOLVO END)) From OPER_Tov Where TOV_NO = Tovar.Tov_ID)
From Tovar

Ну а про процедуру - надо смотреть планы. Скорость выполнения почти будет одинакова. Но меня могут поправить !

Best regards,
Dnico
.
...
Рейтинг: 0 / 0
Выбор варианта для ХП..
    #32662012
Matt Juntunen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Первый вариант оказался лучше тем, что всегда возвращает Null при отсутствии агрегат. функции в подзапросе. А ХП у меня потому, что эта конструкция - часть большой ХП, возвращающей приложению разные выборки (связанные с товаром) в зависимсти от значения доп. параметра.
...
Рейтинг: 0 / 0
Выбор варианта для ХП..
    #32662027
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DnicoНе помню точно, но каэется Case появилась в 1.5
В этом упрошенном варианте, вообще можно обойтись без ХП - одним селектом.
Код: plaintext
1.
2.
3.
4.
Select Tov_ID, 
Tov_Name,
(Select SUM(case (when OT_KOLVO IS NULL THEN  0  ELSE OT_KOLVO END)) 
    From OPER_Tov Where TOV_NO = Tovar.Tov_ID)
From Tovar
Ну а про процедуру - надо смотреть планы. Скорость выполнения почти будет одинакова. Но меня могут поправить !Могут и обложить...
Запрос абсолютно бестолковый.
При выполнении агрегатной функции SUM() , записи содержащие NULL игнорируются.
Посему, CASE внутри SUM тут нафиК не нужен.
Ибо только тормозов добавляет, ничего полезного не делая.
SUM() вернёт NULL только в том случае, если все записи подпадающие
под условие выборки содержат этот самый NULL , либо, если результат выборки пустой.
А чтоб конвертировать NULL в 0 (или любое иное значение) есть COALESCE() .
"Накладывать" его нужно "сверху" на SUM() .
...
Рейтинг: 0 / 0
Выбор варианта для ХП..
    #32662331
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот ... как я и думал ...
Мимопроходящий

Best regards,
Dnico
.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выбор варианта для ХП..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]