Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
ALX
Сообщение
ALX » 12 ноя 2004, 15:28
При использовании в FireBird v1.5 оператора
EXECUTE STATEMENT 'select.......' INTO
подзапрос обрезается до 50 символов. Соответственно "урезанный" запрос вызывает ошибку при выполнении процедуры. Если данную процедуру выполнять в отладчике (использую IB Expert), то ошибка не проявляется, запросы не "обрезаются".
Кто-нибудь сталкивался с подобной проблемрй?

-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 12 ноя 2004, 15:37
не понял - запрос, указанный в одинарных кавычках, или через параметр?
Зачем выполнять execute statement с явно указанным запросом (в кавычках)???
-
ALX
Сообщение
ALX » 12 ноя 2004, 16:26
Конструкция следующего вида:
TABLE_LINK - переменная
ID_PARENT - переменная
FOR EXECUTE STATEMENT 'Select ID_TABLE2 from '||TABLE_LINK||' where ID_TABLE1='||ID_PARENT
INTO :ID_CHIELD DO
begin
--
--
end
-
SSY
- Сообщения: 11
- Зарегистрирован: 27 окт 2004, 14:27
Сообщение
SSY » 12 ноя 2004, 18:11
ALX писал(а):При использовании в FireBird v1.5 оператора
EXECUTE STATEMENT 'select.......' INTO
подзапрос обрезается до 50 символов...
Вероятно, строка кастится по умолчанию до VARCHAR(50).
Я обычно объявляю переменную, скажем, DECLARE VARIABLE Q VARCHAR(2000), формирую в ней текст запроса и выполняю. Всё работает.
-
Гость
Сообщение
Гость » 15 ноя 2004, 11:41
Пробовал и так
DECLARE VARIABLE SQL_TEXT CHAR(250);
.................
.................
SQL_TEXT = 'Select ID_TABLE2 from '||TRIM(TABLE_LINK)||' where ID_TABLE1='||TRIM(ID_PARENT);
FOR EXECUTE STATEMENT SQL_TEXT
INTO :ID_CHIELD DO
begin
--
--
end
все равно эффект тот же - кастит до 50 символов.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 15 ноя 2004, 12:08
a varchar пробовал?
-
ALX
Сообщение
ALX » 15 ноя 2004, 13:14
Конечно пробовал.
По всякому пробовал.
И так:
FOR EXECUTE STATEMENT CAST(SQL_TEXT as VARCHAR(250))
Может это в V1.5.1 уже исправлено (у меня стоит V1.5.0)?
-
dimitr
- Разработчик Firebird
- Сообщения: 888
- Зарегистрирован: 26 окт 2004, 16:20
Сообщение
dimitr » 15 ноя 2004, 13:26
Сам запрос не обрезается. А вот уже в сообщении об ошибке внутри EXECUTE STATEMENT текст исходного запроса обрезается до 50 символов, ибо этого вполне достаточно для его идентификации. В общем, ищи проблему в запросе и/или использовании тобой EXECUTE STATEMENT, а не в сервере. Проверяй соответствие типов возвращаемых значений, например. И вообще, неужели влом привести дословное сообщение об ошибке?
-
ALX
Сообщение
ALX » 15 ноя 2004, 13:52
Да действительно, ошибочка вкралась с типами. Забыл вставить CAST(ID as varchar(50)). Спасибо