Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизПроверка на кратность в триггере Найти похожие ветки
← →
Нонэйм (2005-02-08 22:32) [0]это кусок таблицы, оставил проблемное место
create generator g_base;
set generator g_base to -2147483648;
create exception e_ne_kraten_2 "OBbEM O3Y HE KPATEH 2-M";
create table base
(
id integer not null primary key,
memory numeric(5,0) not null,
n numeric(5,0), /*эти поля использую*/
f float /*для наглядности*/
);
set term ^ ;
create trigger base_bi0 for base
active before insert position 0
as
declare variable n numeric(5,0);
declare variable f float;
begin
n=new.memory/2.0;
f=new.memory/2.0;
if (f<>n) then exception e_ne_kraten_2;
new.n=n;
new.f=f;
if (new.id is null)
then new.id=gen_id(g_base, 1);
end^
set term ; ^
не понимаю почему не срабатываетexception e_ne_kraten_2
Может быть мастера подскажут в чём тут дело или подскажут другой метод проверки кратности? заранее благодарю
← →
Johnmen © (2005-02-08 22:44) [1]>n=new.memory/2.0;
>f=new.memory/2.0;
>if (f<>n) then ...
Вот и не срабатывает. Они равны :)
Насчет кратности.
Она имеет смысл только для целочисленных значений.
Проверить:2*(CAST(INVALUE/2.0 AS INT))-INTVALUE
0 - кратно, 1 - не кратно
← →
Нонэйм (2005-02-08 22:57) [2]cast"ом воспользуюсь, спасибо
а вот то, что они равны, то я не соглашусь, я ж потом записываю их в таблицу и смотрю результаты....возьмем к примеру new.memory=11, то n=6, а f=5.5
← →
Johnmen © (2005-02-08 23:14) [3]А... Понятно. n - целое, f - с плавающей точкой.
Отсюда и несовпадение...
← →
Johnmen © (2005-02-08 23:45) [4]И ещё...
При сравнении происходит неявное преобразование типов.
В данном случае - значение f преобразуется к целому.
Попробуй (f<>n/1.0)
← →
Нонэйм (2005-02-08 23:49) [5]уже поздно :о))))
2*(CAST(INVALUE/2.0 AS INT))-INTVALUE вот это хорошо работает, спасибо :о)
← →
Johnmen © (2005-02-08 23:58) [6]Да не за что...
Только учти, что для отрицательных некратность = -1
Т.е. если = 0, то кратно, иначе - нет.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c