powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / or в IB короткий или длинный
19 сообщений из 44, страница 2 из 2
or в IB короткий или длинный
    #32438199
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ладно, не будем педалировать, а то Мимопроходяший обидится и не будет больше тут появляться...

принимаю заказы на удаление постингов
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438209
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, бывает и на меня проруха
Не обратил внимание на OR
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438219
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО ВСЕМ.
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438302
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю что под NULL везде подразумевали UNKNOWN?
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438325
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldЯ так понимаю что под NULL везде подразумевали UNKNOWN?

Они синонимичны. Даже стандарт не в состоянии внятно обозначить их различие ;-)
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438521
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вы мне скажите, мне надо такое вот написать в триггере:
Код: plaintext
1.
  IF (UPDATING AND OLD.ID<>NEW.ID) THEN
    EXCEPTION ERROR;


Оно будет правильно работать или этого никто не гарантирует и лучше писать
Код: plaintext
1.
2.
  IF (UPDATING) THEN
    IF (OLD.ID<>NEW.ID) THEN
      EXCEPTION ERROR;
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438576
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо,

1) если NEW.ID будет нулл, то эксепшн не выскочит, даже если OLD.ID тоже будет нулл, потому что любое сравнение с нуллом дает неправду...

2) если UPDATING будет нулл, то тоже не выскочит - а оно тебе так и надо.

вобщем, все равно как писать, только нужно иметь ввиду ситуацию 1)
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32438608
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATING не может быть NULL/UNKNOWN, а вобще ты прав, оно по любому правильно работать будет, так как ID у меня объявлен как NOT NULL...
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32439171
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортак как ID у меня объявлен как NOT NULL...

В триггере он тем не менее может быть NULL'ом, так что как он объявлен - не суть важно.
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32439765
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну OLD-значение в триггере не может быть NULL, а NEW-значение хоть и может, но сервер то ругнёться.
А вобще вы бы какой механизм посоветовали для проверки неизменности значения поля. Я иногда использую IF (COALESCE(OLD.FIELD,'+-=')<>COALESCE(NEW.FIELD,'=-+')), но это слишком длинно получается когда много полей :-/
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32439823
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу OLD-значение в триггере не может быть NULL

Еще как может. Посмотри на OLD.ID в BEFORE INSERT OR UPDATE триггере в момент вставки...
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32439886
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrЕще как может. Посмотри на OLD.ID в BEFORE INSERT OR UPDATE триггере в момент вставки...
Так вроде разговор про update? Неужели если field not null при update OLD.Field может быть NULL?
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32439935
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТак вроде разговор про update? Неужели если field not null при update OLD.Field может быть NULL?

Вроде как разговор уже вышел за рамки UPDATE ;-)

Ответ на твой вопрос: по-хорошему нет, не может. Но может по-плохому, если ты в этом триггере присвоил NULL в OLD.ID. К сожалению, сервер это допускает. И более того, это может быть причиной порчи БД. Т.к. присвоение идет во временный буфер записи, а не в таблицу, NOT NULL не проверяется.
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32441330
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrНо может по-плохому, если ты в этом триггере присвоил NULL в OLD.ID
Теоритически наверное да, но ... Не я такими вещами не занимаюсь и другим не советую, да и зачем это? Не вижу примеров для работы с OLD.ID таким образом.
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32442069
Vatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При благополучном стечвении обстоятельств, например много выпивки, мало закуски, багатая фантазия и отсутствие времени(желания) доделвать завтра можно и не такое придумать.
Правда как правило на утро это лечиться :)
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32442114
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну у меня есть идея зачем это может быть нужно. Допустим вам жалко объявлять новую переменную, но надо где-то сохранить промежуточное значение в универсальном триггере например при вставке. Вот и можно в переменную OLD положить ;-)
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32442301
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fedd:
автор потому что любое сравнение с нуллом дает неправду
Не совсем верно. Будет не FALSE а UNKNOWN (NULL как угодно), а вот в IF пойдет на ELSE не потому что FALSE а потому что не TRUE.
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32442746
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я торможу :-(
feddпотому что любое сравнение с нуллом дает неправду
Это как?
Код: plaintext
1.
2.
3.
4.
5.
declare variable a1 integer;
declare variable a2 integer;
...
  a1 = null;
  a2 = null;
  if (a1 = a2) then ... else ...

Куда пойдет обработка?
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
or в IB короткий или длинный
    #32442756
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на else пойдет
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / or в IB короткий или длинный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]