Страница 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. Радуемся жизни.