Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему возвращается NULL? / 14 сообщений из 14, страница 1 из 1
30.04.2004, 11:20
    #32504012
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
Не могу понять в чем проблема :( Хочу пройти по набору данных и ссумировать результат. Если не произвожу суммирования и возвращаю построчно, то возвращается не 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
30.04.2004, 11:21
    #32504017
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
попробуй присвоить
CNT и CENA
начальные значения 0
...
Рейтинг: 0 / 0
30.04.2004, 11:29
    #32504048
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
пробовал не помогло.
...
Рейтинг: 0 / 0
30.04.2004, 11:32
    #32504059
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
авторЕсли не произвожу суммирования и возвращаю построчно, то возвращается не null
во всех строказ вовращаются не Null'ы ?
...
Рейтинг: 0 / 0
30.04.2004, 11:45
    #32504104
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
Зачем такой длинный и не совсем понятный текст ?

Код: 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
30.04.2004, 11:54
    #32504144
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
2Calm
Да все не NULL

2Dnico
Запрос на самом деле сложнее. Price расчитывается ч/з ХП и прочие заморочки... С SUM я уже пробовал - работает, но читаемость нулевая, поэтому и хочется сделать как я указал выше. Если не получится, то тогда использую SUM.
...
Рейтинг: 0 / 0
30.04.2004, 12:35
    #32504289
FreemanZAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается 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.
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
30.04.2004, 13:29
    #32504449
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему возвращается NULL?
2 FreemanZAV

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

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

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

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

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


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