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

EXECUTE STATEMENT ... INTO - несовместимость типов

Добавлено: 02 авг 2005, 19:08
Desdechado
FB 1.5.2
Наковырял такую неприятность. В таблице поле s_id типа SMALLINT. В процедуре пишу
EXECUTE STATEMENT 'SELECT s_id FROM Tablica' INTO :n;
При этом объявлено
DECLARE VARIABLE n INTEGER;
При выполнении процедуры на приведенной конструкции ругается о несовместимости типов. Всегда считал, что SMALLINT приводится к INTEGER весьма легко...
Если сделать одного типа (и поле, и переменную), то все гуд.

Добавлено: 02 авг 2005, 19:19
Merlin
Долго ковырял-то? В релизных нотах написано, на стр 22, третьей по счёту и последней про execute statement.

Добавлено: 02 авг 2005, 21:49
Desdechado
да нет, случайно попался, портировал с Оракла хранимку...

если имелось ввиду вот это
Return values are strictly checked for data type in order to avoid unpredictable type-casting
exceptions. For example, the string ’1234’ would convert to an integer, 1234, but ’abc’ would give
a conversion error.

то, имхо, второе предложение не так очевидно, как вам показалось. Там, вроде, написано, что строка БУДЕТ конвертироваться. Я же вообще числа, причем совместимые по типам снизу вверх, конвертирую.

Добавлено: 02 авг 2005, 22:11
Merlin
Когда мне кажется, я крещусь.

Return values are strictly checked for data type in order to avoid unpredictable type-casting
exceptions. For example, the string ’1234’ would convert to an integer, 1234, but ’abc’ would give
a conversion error.

Перевожу:

Возвращаемые значения жёстко контролируются по типам во избежание непредсказуемых ошибок преобразования типов. НАПРИМЕР (компрене ву? например!) при няевных преобразованиях строк строка содержащая '1234' успешно конвертируется в целое, а содержащая 'абеце' будет приводить к возникновению исключения.

Так вот. Намекаю. Никто не мешает благородному дону закастить свой smallint в int явно внутри запроса. И строку тоже, если человек понимает что он делает и берёт на себя ответственность. А вот автомат в данном случае за него этого делать не будет, слишком много вариантов и велика вероятность втихомолку выдавать не то, что мы с тобой ожидаем.

Добавлено: 02 авг 2005, 23:03
Desdechado
Благодарю за подробные объяснения.

Мне проще объявить переменную другого типа, подходящего :)