Oracle использует 3-х значную логику, ноль - 3-е значение. Что-то может быть истинным, ложным или несуществующим. null
- это небытие, равное ничему. Вы не можете проверить на ноль с оператором равенства. Используйте IF :new.ShipAddress is null
для проверки на нулевые значения.
Вы также неправильно ссылаетесь на столбец в триггере. Не нужно ничего объявлять, и вы должны ссылаться на значение :new
или :old
. Это хороший ресурс.
Было бы лучше запретить нули, накладывая ограничение на таблицу, чтобы shipaddress
никогда не мог быть нулевым. Смотрите здесь . Итак,
alter table my_table modify shipaddress not null;
чтобы добавить его в таблицу на месте. Лучше добавить ограничение при создании таблицы. Это также немного ускорит процесс, потому что вам не нужно оценивать триггер.
EDIT:
shipaddress
имеет кольцо полного адреса, возможно, разделенный запятыми? Я определенно рекомендую выделять каждую часть адреса таким образом, что-то вроде address1
, address2
, address3
, town
, county
, postcode
. Я британец, поэтому при необходимости измените на state
, zip
и т. Д. Это делает запрос и манипулирование данными, если вам нужно сделать это намного проще.