Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Парадокс с выходными данными в серверной процедуре   Найти похожие ветки 

 
korvin ©   (2004-12-12 21:00) [0]

Процедурка должна выдавать код клиента, код цеха и 3 пары колонок - сумма/вес. Тип выходных данных в этих парных колонках Numeric(8,2)... и тут получаю прикол - первая пара колонок идёт с положенной точностью (2 знака после запятой), а остальные как целые числа. В чём проблема? ХЭЭЭЭЛП !!!!!!!!!!!!!!
Как видно из текста процедуры данные черпаются из одних и тех же колонок исходной таблицы.

begin
 for
/*Выборка накладных (отгрузочные)*/
     select TTN1.KLIENT_KOD,
            TTN1.CEH_KOD,
            TTN1.TTN1_DATA,
            sum(TTN1.TTN1_SUM) OTGRUZ_SUM,
            sum(TTN1.VAGA_NET) OTGRUZ_VES,
            sum(0) VOZVRAT_SUM,
            sum(0) VOZVRAT_VES,
            sum(0) FIRM_SUM,
            sum(0) FIRM_VES
     from TTN1
     where (TTN1.KLIENT_FIRM="0")
          and (TTN1.KLIENT_KOD>10)
          and (TTN1.TTN1_VOZVRAT="N")
          and (TTN1.TTN1_DATA>=:DATA_FIRST)
          and (TTN1.TTN1_DATA<=:DATA_LAST)
   group by TTN1.KLIENT_KOD, TTN1.CEH_KOD, TTN1.TTN1_DATA

union
/*Выборка накладных (возвратные)*/
     select TTN1.KLIENT_KOD,
            TTN1.CEH_KOD,
            TTN1.TTN1_DATA,
            sum(0) OTGRUZ_SUM,
            sum(0) OTGRUZ_VES,
            sum(TTN1.TTN1_SUM) VOZVRAT_SUM,
            sum(TTN1.VAGA_NET) VOZVRAT_VES,
            sum(0) FIRM_SUM,
            sum(0) FIRM_VES
     from TTN1
     where (TTN1.KLIENT_FIRM="0")
          and (TTN1.KLIENT_KOD>10)
          and (TTN1.TTN1_VOZVRAT="Y")
          and (TTN1.TTN1_DATA>=:DATA_FIRST)
          and (TTN1.TTN1_DATA<=:DATA_LAST)
   group by TTN1.KLIENT_KOD, TTN1.CEH_KOD, TTN1.TTN1_DATA

union
/*Выборка накладных (фирменные)*/
     select TTN1.KLIENT_KOD,
            TTN1.CEH_KOD,
            TTN1.TTN1_DATA,
            sum(TTN1.TTN1_SUM) OTGRUZ_SUM,
            sum(TTN1.VAGA_NET) OTGRUZ_VES,
            sum(0) VOZVRAT_SUM,
            sum(0) VOZVRAT_VES,
            sum(TTN1.TTN1_SUM) FIRM_SUM,
            sum(TTN1.VAGA_NET) FIRM_VES
     from TTN1
     where ((TTN1.KLIENT_FIRM="1") or (TTN1.KLIENT_KOD<=10))
          and (TTN1.TTN1_DATA>=:DATA_FIRST)
          and (TTN1.TTN1_DATA<=:DATA_LAST)
   group by TTN1.KLIENT_KOD, TTN1.CEH_KOD, TTN1.TTN1_DATA

/* Выходные параметры */
   into  :KLIENT_KOD,
         :CEH_KOD,
         :TTN1_DATA,
         :OTGRUZ_SUM,
         :OTGRUZ_VES,
         :VOZVRAT_SUM,
         :VOZVRAT_VES,
         :FIRM_SUM,
         :FIRM_VES
   do suspend;
end


 
Zacho ©   (2004-12-12 21:09) [1]

korvin ©   (12.12.04 21:00)

Все sum(0) замени на CAST (0 AS NUMERIC (8,2))

P.S. А зачем для одного запроса прцедура ? Или на самом деле в ней еще что-то есть ?


 
korvin ©   (2004-12-12 21:30) [2]

Эта процедура готовит основу для последующих запросов для анализа. А за совет - спасибо, ща и опробую


 
korvin ©   (2004-12-12 21:47) [3]

Zacho ©   (12.12.04 21:09) [1]
Другая проблема: процедура с таким изменением не компилируется вообще:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Data type unknown.

хотя, если убрать все union то работает, но смысл в самом использовании такой процедуры теряется :(


 
Zacho ©   (2004-12-12 22:06) [4]

korvin ©   (12.12.04 21:47) [3]

Сейчас создал небольшую тестовую процедурку - всё работает. Ищи ошибку, или приведи уже измененный текст процедуры.

И на какую строку именно кажет ошибка ?


 
korvin ©   (2004-12-12 22:28) [5]

Для чистоты эксперимента я тоже взял "облегчённый" вариант процедуры+пересоздал выходные данные. Уточню, что использую не совсем IB, а FB.

begin
 for select TTN1.CEH_KOD,
            CAST (0 AS NUMERIC (8,2)) OTGRUZ_SUM,
            sum(TTN1.TTN1_SUM) VOZVRAT_SUM
     from TTN1
     where (TTN1.TTN1_DATA>=:DATA_FIRST)
          and (TTN1.TTN1_DATA<=:DATA_LAST)
   group by TTN1.KLIENT_KOD, TTN1.CEH_KOD, TTN1.TTN1_DATA

union
     select TTN1.CEH_KOD,
            sum(TTN1.TTN1_SUM) OTGRUZ_SUM,
            CAST (0 AS NUMERIC (8,2)) VOZVRAT_SUM
     from TTN1
     where (TTN1.TTN1_DATA>=:DATA_FIRST)
          and (TTN1.TTN1_DATA<=:DATA_LAST)
   group by TTN1.KLIENT_KOD, TTN1.CEH_KOD, TTN1.TTN1_DATA

   into  :CEH_KOD,
         :OTGRUZ_SUM,
         :VOZVRAT_SUM
   do suspend;
end


А ошибка не на строку, а в общем:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Data type unknown.


 
Zacho ©   (2004-12-12 22:48) [6]

korvin ©   (12.12.04 22:28) [5]

Странно, у меня примерно то же самое, но всё работает. Правда, у меня тоже не IB, а Yaffil.
А у поля TTN1_SUM точно тип NUMERIC (8,2) ?
Попробуй вместо CAST (0 AS NUMERIC (8,2))  написать SUM(CAST (0 AS NUMERIC (8,2))), хотя у меня работает и так, и так.
Ещё идея: попробуй то же самое с полями NUMERIC(18,2). Возможно, что в результате SUM(TTN1_SUM) получается не NUMERIC (8,2), а NUMERIC большей разрядности.

Еще небольшой совет: всегда явно задавай алиасы таблиц, причём отличные от их имён. Вроде бы были какие-то баги, в случае если алиас совпадает с именем таблицы.


 
korvin ©   (2004-12-12 22:59) [7]

Окей, попробую ещё это ... если не получится и до утра не отвечу - значит пошёл топиться :(
Спасибо за помощь и за беспокойство


 
Zacho ©   (2004-12-12 23:06) [8]

korvin ©   (12.12.04 22:59) [7]
если не получится и до утра не отвечу - значит пошёл топиться :(


Ну, а если ответишь, а я не отвечу - значит, пошел спать :) У нас вообще-то уже ночь :)


 
korvin ©   (2004-12-12 23:07) [9]

Удивлён, но сработало - поставил CAST (0 AS NUMERIC (15,2)), а в списке выходных параметров забыл сменить и осталось (8,2). Прикол в том, что всё сразу заработало ... ладно, такие странности я пожалуй готов "проглотить".
Ещё раз спасибо за решение проблемы.



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.167 c
1-1104720522
Nes
2005-01-03 05:48
2005.01.16
Как программку, которая формирует нелинейный список?


14-1104272342
dmk
2004-12-29 01:19
2005.01.16
Купил недавно notebook Toshiba


3-1102938329
able
2004-12-13 14:45
2005.01.16
Выборка в базе..


1-1103792518
SbtON
2004-12-23 12:01
2005.01.16
PopUpMenu в StringGrid


1-1104314237
denis24
2004-12-29 12:57
2005.01.16
Поток и переменная