Страница 1 из 1

Проверить ПЕРЕМЕННУЮ на NULL (Триггеры)

Добавлено: 01 окт 2006, 21:53
Михаил Извеков
Не могу сообразить как проверить переменную на NULL. Честно излазил форум, но не нашел.

В триггере (BEFORE UPDATE) есть такой код:

Код: Выделить всё

  
...
  DECLARE VARIABLE VAR_P_SEND          INTEGER;
...
  IF (NEW.P_SEND <> OLD.P_SEND)
    THEN VAR_P_SEND = NEW.P_SEND;
    ELSE VAR_P_SEND = NULL;
...
Как мне проверить VAR_P_SEND на NULL?
IF (VAR_P_SEND IS NULL) - говорит, что такого столбца (VAR_P_SEND) в таблице нету.
IF (VAR_P_SEND = NULL) - говорит, что неизвестный Token - NULL.

Добавлено: 02 окт 2006, 01:54
CyberMax
А есл вот так:

Код: Выделить всё

IF (:VAR_P_SEND IS NULL) THEN
?

Добавлено: 02 окт 2006, 14:41
WildSery
2 CyberMax:
Без разницы.

Михаил, что-то вы нам недоговариваете. Не пытаетесь ли NEW.VAR_P_SEND проверить или типа того?

Добавлено: 02 окт 2006, 14:56
Dimitry Sibiryakov
Похоже, у аффтара версия сервера где еще не запретили обращаться к полям записи без префиксов NEW/OLD...

Добавлено: 02 окт 2006, 15:13
CyberMax
2 WildSery, Dimitry Sibiryakov. Я что-то не понял, мы что, разный текст видим? У него есть переменная "VAR_P_SEND". Вопрос:
Как мне проверить VAR_P_SEND на NULL?
. При чем тут New, Old? :wink:

Добавлено: 02 окт 2006, 15:22
WildSery
Как он написал, всё работает правильно.
А так как ошибка у него всё же есть (иначе бы не писал) - то либо предположение Дмитрия, либо он "упростил" пример слишком сильно, а на самом деле там нечто совсем другое.

Добавлено: 02 окт 2006, 15:30
CyberMax
Подытожим :).
2 Михаил Извеков. Выложи весь код проблемного триггера. И версия сервера не помешает.

Добавлено: 02 окт 2006, 18:28
Михаил Извеков
Прошу у всех прощения за беспокойство. Разобрался.
Вначале я написал

Код: Выделить всё

IF (VAR_P_SEND = NULL) THEN ...
(решил что в тексте триггера будет скорее такая проверка нежели IS NULL как в SQL). Получил ошибку на неизвестный токен. Переделал на

Код: Выделить всё

IF (VAR_P_SEND IS NULL) THEN ...
- получил ошибку на несуществование поля в таблице. Какое еще думаю поле, это же переменная? Решение подсказал ответ CyberMax - дело в том, что по невнимательности я не заметил, что следующую ошибку я получил уже в другом месте, а именно в запросе с INSERT и уж там-то помогло добавление двоеточия перед именем переменной.
Еще раз простите за беспокойство и спасибо за ответы.