Запросы, планы, оптимизация запросов, ...
Модераторы: 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;
либо так