Главная страница
    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
6-1098669128
Muzzy
2004-10-25 05:52
2005.01.16
Помогите!!! В CGI {$E cgi} AssignFile/Rewrite/Append ОШИБКИ!!!


3-1103022631
yaric
2004-12-14 14:10
2005.01.16
Длительные процедуры на сервере


3-1102619664
dUM
2004-12-09 22:14
2005.01.16
быстрый поиск по выпадающему списку DBGrid


3-1103189813
lexis
2004-12-16 12:36
2005.01.16
У клиента не работает TClientDataSet


14-1104388237
Чеширский_Кот
2004-12-30 09: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
Английский Французский Немецкий Итальянский Португальский Русский Испанский