Проблемка с приведением типов

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

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

Ответить
SAN_i
Сообщения: 14
Зарегистрирован: 31 июл 2006, 19:24

Проблемка с приведением типов

Сообщение SAN_i » 31 авг 2006, 15:50

использую FB 1.5

есть табличка в ней поле типа numeric(4,0) в нём данные 2006
пишу процедуру, в ней текст:

Код: Выделить всё

    select cast(END_YEAR as char)
      from san_proj_zak
      where san_proj_zak.id = :curent_id
      order by san_proj_zak.id
    into year_dead;
в результате ошибка:
Overflow occurred during data type conversion.
conversion error from string "2006".
Подскажите плз. как решить эту проблемку

Заранее спасибо

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 31 авг 2006, 15:57

Естественно. Четыре символа не влезают в один. Да и код ты, собственно, привел левый, потому что он не должен компилироваться в принципе (INTO без двоеточия).

SAN_i
Сообщения: 14
Зарегистрирован: 31 июл 2006, 19:24

Сообщение SAN_i » 31 авг 2006, 16:02

насчёт кода, то я во всех процедурах, тригерах двоеточие после into не ставил и всё работает нормально

за ответ спасибо вьехал, теперь работает

исправленный вариант:

Код: Выделить всё

select cast(END_YEAR as char(4))
      from san_proj_zak
      where san_proj_zak.id = :curent_id
      order by san_proj_zak.id
    into year_dead;

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 31 авг 2006, 16:54

2 Дмитрий:
Двоеточие нужно только когда переменные внутри запроса используешь или для вызова процедуры (UDF, etc.)

2 ЫФТ_ш:
selct ... into Var может обработать только одну строку, если он вернёт две и больше - будет ошибка. А если у тебя всегда одна возвращается, то нахрена order by?
кроме того, не забывай перед селектом year_dead=null сделать, к примеру, а то если он ни одной записи не вернёт - будет предыдущее значение.

Код: Выделить всё

year_dead=null;
select first 1 cast(END_YEAR as char(4)) 
      from san_proj_zak 
      where san_proj_zak.id = :curent_id 
      order by san_proj_zak.id 
    into year_dead;
либо так

Ответить