powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему возвращается NULL?
14 сообщений из 14, страница 1 из 1
Почему возвращается NULL?
    #32504012
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять в чем проблема :( Хочу пройти по набору данных и ссумировать результат. Если не произвожу суммирования и возвращаю построчно, то возвращается не null.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE PROCEDURE ORDER_OPERATION_SUM_SEL (
    ID_ORDER INTEGER)
RETURNS (
    CNT DOUBLE PRECISION,
    CENA DOUBLE PRECISION)
AS
DECLARE VARIABLE CNT_CUR DOUBLE PRECISION;
DECLARE VARIABLE PRICE DOUBLE PRECISION;
BEGIN

   -- Расчет стоимости операции в заказе
 
  FOR
    SELECT
      OS.CNT,  F.PRICE
    FROM
      ORDERS O
    , ORDER_STANDARD OS
    , FURNITURE F
    WHERE O.ID_ORDER = :ID_ORDER
      AND O.ID_ORDER = OS.ID_ORDER
      AND OS.ID_FURNITURE = F.ID_FURNITURE
    INTO :CNT_CUR,
            :PRICE
  DO
  BEGIN
    CNT = CNT + CNT_CUR;
    CENA = CENA + (CNT_CUR * PRICE);
    -- CNT = CNT_CUR;
 
    -- CENA = CNT * PRICE;
 
    -- SUSPEND;
 
  END
  SUSPEND;
END
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504017
Фотография Calm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй присвоить
CNT и CENA
начальные значения 0
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504048
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробовал не помогло.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504059
Фотография Calm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли не произвожу суммирования и возвращаю построчно, то возвращается не null
во всех строказ вовращаются не Null'ы ?
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504104
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем такой длинный и не совсем понятный текст ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    SELECT
      SUM(OS.CNT),  SUM(F.PRICE*OS.CNT)
    FROM
      ORDERS O
    , ORDER_STANDARD OS
    , FURNITURE F
    WHERE O.ID_ORDER = :ID_ORDER
      AND O.ID_ORDER = OS.ID_ORDER
      AND OS.ID_FURNITURE = F.ID_FURNITURE
    INTO :CNT,
            :CENA;
    SUSPEND;


И не будет никаких NULL ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504144
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Calm
Да все не NULL

2Dnico
Запрос на самом деле сложнее. Price расчитывается ч/з ХП и прочие заморочки... С SUM я уже пробовал - работает, но читаемость нулевая, поэтому и хочется сделать как я указал выше. Если не получится, то тогда использую SUM.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504289
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
CREATE PROCEDURE ORDER_OPERATION_SUM_SEL (

    ID_ORDER INTEGER)

RETURNS (

    CNT DOUBLE PRECISION,

    CENA DOUBLE PRECISION)

AS

DECLARE VARIABLE CNT_CUR DOUBLE PRECISION;

DECLARE VARIABLE PRICE DOUBLE PRECISION;

BEGIN

 -- Расчет стоимости операции в заказе
 
  CNT= 0 ;
  CENA= 0 ;
  CNT_CUR= 0 ;
  PRICE= 0 ;

FOR

SELECT

      OS.CNT,  F.PRICE

FROM

      ORDERS O

    , ORDER_STANDARD OS

    , FURNITURE F

WHERE O.ID_ORDER = :ID_ORDER

AND O.ID_ORDER = OS.ID_ORDER

AND OS.ID_FURNITURE = F.ID_FURNITURE

INTO :CNT_CUR,

            :PRICE

  DO

BEGIN
    IF (CNT_CUR IS NULL) THEN CNT_CUR = 0 ;
    IF (PRICE IS NULL) THEN PRICE = 0 ;
    CNT = CNT + CNT_CUR;

    CENA = CENA + (CNT_CUR * PRICE);

 -- CNT = CNT_CUR;
 

 -- CENA = CNT * PRICE;
 

 -- SUSPEND;
 

END

  SUSPEND;

END
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504449
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 FreemanZAV

Зергуд! Работает. Спасиб.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504457
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ведь что странно: Целый день обсуждать можно, а потом воскликнуть: УРА!!!
авторпопробуй присвоить CNT и CENA начальные значения 0

Это был первый ответ !!! )

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32504484
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват каюсь, посыпаю голову пеплом, присваивал, только не выходным парамметрам, а переменным. Что-то мне в голову не укладывается, почему они сами не инициализируются?
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32505049
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они кажется инициализируются - NULL-ом.
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32505215
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Они кажется инициализируются - NULL-ом.
Юноша, запомни, NULL+Что-то=NULL !!!
Поэтому, если CNT инициализировано NULL-ом, то
CNT = CNT + CNT_CUR будет равно NULL !
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32505233
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G
>>>Они кажется инициализируются - NULL-ом.

>>Юноша, запомни, NULL+Что-то=NULL!!!
>>Поэтому, если CNT инициализировано NULL-ом, то
>>CNT = CNT + CNT_CUR будет равно NULL!

А я разве спорю насчет этого?
Я всего лишь утверждал, что при вызове ХП, переменные
инициализируются null-ом. Или это не так?
...
Рейтинг: 0 / 0
Почему возвращается NULL?
    #32507115
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажем так, значение их неопределено (если не предпринять некоторых действий в FB1.5).
На каждом последующем вызове процедуры, их значение равно предыдущему .
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему возвращается NULL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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