Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.036 c
14-1104048362
Чеширский_Кот
2004-12-26 11:06
2005.01.16
Где именинники?


1-1104133040
Pabse
2004-12-27 10:37
2005.01.16
Оптимизация GIF


3-1103013844
Garry_c
2004-12-14 11:44
2005.01.16
Русский текст в Delphi при использовании Interbase компонентов


1-1104723673
saimon
2005-01-03 06:41
2005.01.16
Про компилятор дельфи. Помогите...


6-1098729042
Ермак
2004-10-25 22:30
2005.01.16
Именованные каналы в сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский