Форум: "Базы";
Текущий архив: 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.034 c