EXECUTE STATEMENT обрезает запросы более 50 символов

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
ALX

EXECUTE STATEMENT обрезает запросы более 50 символов

Сообщение 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

RE

Сообщение 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

Re: EXECUTE STATEMENT обрезает запросы более 50 символов

Сообщение 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)). Спасибо

Ответить