Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Вниз

Ошибки при сцеплении строк в процедурах под 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
14-81462
koks
2002-06-27 10:59
2002.07.25
QReport vs FreeReport


7-81488
x-Position
2002-04-20 18:28
2002.07.25
Нулевой байт? А как с ним бороться?


1-81251
vanek
2002-07-14 18:56
2002.07.25
проги,проги,проги


1-81332
BAY
2002-07-12 15:44
2002.07.25
Клавиатура


1-81267
programmerts
2002-07-10 20:12
2002.07.25
Как написать программу без формы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский