Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.25;
Скачать: CL | DM;

Вниз

Ошибки при сцеплении строк в процедурах под IB   Найти похожие ветки 

 
Boroda Oleg ©   (2002-07-05 10:50) [0]

Господа!

Подскажите, если кто знает, в каких случаях возникает subj:

Arithmetic overflow or division by zero has occurred.
arithmetic exteption, numeric overflow, or string truncation.

Точнее сказать, на что стоит обращать внимание при сцеплении строк которые обрабатываются функциями. О том, что размер результирующей строки должен быть, как минимум сумме сцепляемых строк я знаю, но что еще может быть? Может быть какие нибудь ограничения размера строки, или число сцепляемых строк? Почему такая ошибка может возникать при вызове функций ltrim или rtrim, даже если в строке она одна, и размер строки заведомо меньше ограниченного в функции?


 
Johnmen ©   (2002-07-05 10:59) [1]

Длина результирующей строки не должна превышать размерность поля, в которое ее хотят запихнуть...:)


 
kaif ©   (2002-07-05 11:29) [2]

Иногда если неявно подразумевается определенная длина поля, то конкатенация может привести к ошибке, особенно в запросах с UNION. Иногда имеет смысл после конкатенации делать принудительное приведение типа с помощью CAST.


 
Boroda Oleg ©   (2002-07-05 12:19) [3]

Вроде как все явно подрузамевается, да и насчет результирующей длинны проверяю. Вот ниже привел процедурку. Размеры переменных строго равны тем, какие они в базе. Где я здесь мог ошибиться? Процедура глючит где-то на 50% запросов.
И еще, кстати, как можно с помощью cast регулировать число знаков после запятой? У меня переменная 0.5 передается в строку как "0.500000000000", а надо бы "0.5" ?


CREATE PROCEDURE GETGOOD (
ID INTEGER
) RETURNS (
NAME VARCHAR(300)
) AS
DECLARE VARIABLE FRM VARCHAR(10);
DECLARE VARIABLE AK INTEGER;
DECLARE VARIABLE AMM NUMERIC(15,3);
DECLARE VARIABLE VK INTEGER;
DECLARE VARIABLE VOL NUMERIC(15,3);
DECLARE VARIABLE SVOL VARCHAR(10);
DECLARE VARIABLE SK INTEGER;
DECLARE VARIABLE SUP NUMERIC(15,3);
DECLARE VARIABLE SSUP VARCHAR(10);
DECLARE VARIABLE SERIAL VARCHAR(10);
DECLARE VARIABLE NM VARCHAR(80) CHARACTER SET WIN1251;
DECLARE VARIABLE NAM VARCHAR(300) CHARACTER SET WIN1251;
DECLARE VARIABLE T_VL VARCHAR(10);
begin
FOR
SELECT NAME SERIAL, FR.SFORM FORM, SG.AMMOUNTKEY, SG.AMMOUNT, SG.VOLIMEKEY, SG.VOLIME,
VL.SVOLIME MVOLIME, SG.SUPPORTKEY, SG.SUPPORT, SP.SSUPPORT,
(SELECT NAME FROM GOODTREE WHERE GT.ID_PARENT = ID_GOODTREE) NAME
FROM GOODTREE GT, SERIALGOOD SG, FORM FR, VOLIME VL, SUPPORT SP
WHERE (GT.ID_GOODTREE = :ID)
AND (GT.ID_SOURCE = SG.ID_SERIAL)
AND (SG.FORM = FR.ID_FORM)
AND (SG.MEASUREVOLIME = VL.ID_VOLIME)
AND (SG.MEASURESUPPORT = SP.ID_SUPPORT)
INTO Serial, Frm, AK, Amm, VK, Vol, SVol, SK, Sup, SSup, Nm
DO BEGIN
/* Nm = rtrim(Nm);
Nm = ltrim(Nm);
Frm = ltrim(rtrim(Frm)); */
NAM = Nm || " " || Frm;
if (VK = 0) then begin
/* NAME = numbtostr(Vol);*/
t_vl = cast (Vol as varchar(30));
NAM = NAM || t_vl || SVol;
end
NAME = NAM;
SUSPEND;
END
end



Страницы: 1 вся ветка

Текущий архив: 2002.07.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
3-81165
KAA
2002-07-04 11:09
2002.07.25
2000 Warning: Null value is eliminated by an aggregate or


3-81147
alexvan
2002-07-03 16:08
2002.07.25
DBLookupComboBox не желает видеть данных из Table


1-81224
Help
2002-07-13 20:02
2002.07.25
Как в Memo вставить текст при нажатии...


1-81337
Cola
2002-07-08 22:17
2002.07.25
XL-Report свойства


1-81226
Sour
2002-07-14 12:27
2002.07.25
Отенки цвета