Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-1106306947
IronHawk
2005-01-21 14:29
2005.03.06
Приветствую! Всё о старом, TRANSPARENT формы, как?


14-1108632653
Ega23
2005-02-17 12:30
2005.03.06
Умереть - не встать!


14-1107855074
Alexander Panov
2005-02-08 12:31
2005.03.06
Статистика по использованию клиентов форумов.


3-1107428374
BioAngel
2005-02-03 13:59
2005.03.06
paradox и пароль


4-1106388517
Goorus
2005-01-22 13:08
2005.03.06
Подсказка к CheckBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский