Страница 1 из 1

Проблема с execute statement в FB 1.5.1

Добавлено: 25 ноя 2004, 12:56
a3a3ello
В ХП выполняется запрос

select client, sum(kolich), count(*)
from tablename
where date1='03.10.2004'
group by 1';

выполняется без проблем. Но когда тот же запрос я вставляю в переменную и выполняю через execute statement выдается ошибка, что какое-то значение должно быть 0 - 32767. При удалении count(*) ошибка исчезает. В чем может быть дело ?
Спасибо.

Добавлено: 25 ноя 2004, 13:06
dimitr
Какое именно значение? Приведи точное сообщение об ошибке.

Добавлено: 25 ноя 2004, 13:28
a3a3ello
Сообщение такое

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
numeric value between 0 and 32767 inclusive required.



Все поля таблиц и параметры ХП используемые в этом запросе у меня bigint. Так, что никакого переполнения быть не должно.

Добавлено: 25 ноя 2004, 14:54
dimitr
На клиенте firebird.msg обнови для начала. Полагаю, что кавычка после GROUP BY 1 - опечатка? В какие переменные вставляешь результат? Как пить дать, у тебя налицо несовпадение типов.

Добавлено: 25 ноя 2004, 15:27
a3a3ello
Вставляю client в varchar, sum и count в bigint. Да вопрос по моему не в этом ведь точно такой же запрос без execute statement с теми же переменными работает и без count работает ! Может это глюк какой? Попробуйте кто-нибудь у себя запустить подобную ХП. Таблица у меня 1,5 млн записей.

Спасибо.

Добавлено: 25 ноя 2004, 15:45
a3a3ello
Только что выяснил, что размер таблицы не имеет значения. При двух записях та же фигня.

Совсем тоска

Добавлено: 25 ноя 2004, 16:05
a3a3ello
Упростил запрос до предела

begin
txt_sql = 'select count(*) from table_try';
for execute statement main_sql
into :kolichstvo do
begin
suspend;
end


Выдает ошибку. Если вместо count(*) подставить что -то другое : sum(), avg(), просто поле, то работает нормально.

заработало

Добавлено: 25 ноя 2004, 18:26
a3a3ello
Если кому еще интересно : выходной параметр в который выталкивалось поле count(*) был bigint. сделал его int и все заработало. Хотя конечно интересно почему так не адекватно реагировал только count(). Может разработчикам наябедничать ?

Добавлено: 25 ноя 2004, 18:32
dimitr
a3a3ello писал(а):Вставляю client в varchar, sum и count в bigint. Да вопрос по моему не в этом ведь точно такой же запрос без execute statement с теми же переменными работает и без count работает !
Читаем RelNotes, стр. 22:

4. Return values are strictly checked for data type in order to avoid unpredictable type-casting exceptions.

Проверяем, какой тип данных возвращает count. Оказывается, что INT. А пихаем его в BIGINT. Перечитываем вышеприведенный абзац еще раз. Думаем. Меняем переменную на INT. Радуемся жизни.