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

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Михаил Извеков
Сообщения: 2
Зарегистрирован: 01 окт 2006, 21:46

Проверить ПЕРЕМЕННУЮ на 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.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 02 окт 2006, 01:54

А есл вот так:

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

IF (:VAR_P_SEND IS NULL) THEN
?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 02 окт 2006, 14:41

2 CyberMax:
Без разницы.

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 02 окт 2006, 14:56

Похоже, у аффтара версия сервера где еще не запретили обращаться к полям записи без префиксов NEW/OLD...

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 02 окт 2006, 15:13

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 02 окт 2006, 15:22

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

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 02 окт 2006, 15:30

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

Михаил Извеков
Сообщения: 2
Зарегистрирован: 01 окт 2006, 21:46

Сообщение Михаил Извеков » 02 окт 2006, 18:28

Прошу у всех прощения за беспокойство. Разобрался.
Вначале я написал

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

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

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

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

Ответить