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

Не работает ХП с объединением строк

Добавлено: 21 ноя 2007, 10:41
Pavel_ch
Доброго времени суток. Что-то не пойму, почему может не работать такая ХП

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

CREATE PROCEDURE GET_ADDR_STRING (
    abon_id integer)
returns (
    abon_name varchar(120),
    adr_string varchar(200))
as
declare variable adr_index varchar(6);
declare variable adr_region varchar(50);
declare variable adr_raion varchar(50);
declare variable adr_city varchar(60);
declare variable adr_street varchar(60);
declare variable adr_house varchar(15);
declare variable adr_korpus varchar(15);
declare variable adr_kvartira varchar(50);
declare variable adr_dop_info varchar(50);
begin
  select abon_name, adr_index, adr_region, adr_raion, adr_city, adr_street, adr_house, adr_korpus, adr_kvartira, adr_dop_info
  from abonents where (id = :abon_id)  into :abon_name, :adr_index, :adr_region, :adr_raion, :adr_city, :adr_street, :adr_house, :adr_korpus, :adr_kvartira, :adr_dop_info;
  if (not adr_index = '') then adr_index = adr_index || ', ';
  if (not adr_region = '') then adr_region = adr_region || ', ';
  if (not adr_raion = '') then adr_raion = adr_raion || ', ';
  if (not adr_city = '') then adr_city = adr_city || ', ';
  if (not adr_street = '') then adr_street = adr_street || ', ';
  if (not adr_house = '') then adr_house = adr_house || ', ';
  if (not adr_korpus = '') then adr_korpus = adr_korpus || ', ';
  if (not adr_kvartira = '') then adr_kvartira = adr_kvartira || ', ';
  if (not adr_dop_info = '') then adr_dop_info = adr_dop_info || ', ';
  adr_string = adr_index || adr_region || adr_raion || adr_city || adr_street || adr_house || adr_korpus || adr_kvartira || adr_dop_info;
  suspend;
end
Тут суть простая: на вход подаём ID абонента, а на выходе получаем его полное наименование и юр. адрес собранный в одну строку. Компилируется нормально, а при запуске говорит Arithmetic overflow or division by zero has occurred. arithmetic exception, numeric overflow, or string truncation.
Где тут могут быть грабли?

Сервер: Firebird 2.0.3 на Linux (CentOS)

Re: Не работает ХП с объединением строк

Добавлено: 21 ноя 2007, 10:53
_Mad_
Скорее всего размер выходной переменной не достаточен.

Re: Не работает ХП с объединением строк

Добавлено: 21 ноя 2007, 11:08
Pavel_ch
_Mad_ писал(а):Скорее всего размер выходной переменной не достаточен.
С переменными вроде всё нормально - внутренние переменные процедуры (с частями адреса) имеют такой же тип, что и поля таблицы в которых эти данные хранятся, это же касается и выходного значения abon_name.
Выходное значение adr_string пробовал ставить даже varchar(700), это уже с большим запасом, и всё равно эта шибка

Добавлено: 21 ноя 2007, 11:50
Pavel_ch
Разобрался. Дело-то действительно в переменных. Там индекс Varchar(6) был, а я ж к нему ещё два символа добавлял - вот и ошибка.
Недоглядел :oops: