У меня есть таблица sqlite, в которой указаны характеристики продукта. Особенности, например. цвет, находятся в логических столбцах. Столбцы имеют значение «1» или «NULL». Некоторые функции являются эксклюзивными. Поскольку структура таблицы фиксирована, я попытался создать триггер, вызывающий исключение, но он не работает. Что я делаю не так?
Пример:
CREATE TABLE productColor(
productId INTEGER PRIMARY KEY,
isRed INTEGER,
isBlue INTEGER,
isYellow INTEGER,
isBrown INTEGER)
Товар может быть только одного цвета. Моя идея состояла в том, чтобы подсчитывать столбцы, в которых указано более одного цвета, то есть менее трех значений NULL. Если есть хотя бы одна такая строка, триггер должен вызвать исключение. Вот как выглядит мой триггер:
CREATE TRIGGER onlyOneColor
BEFORE INSERT ON productColor
WHEN
(SELECT COUNT (*) FROM
(SELECT ((CASE WHEN isBrown IS NULL THEN 1 ELSE 0 END) +
(CASE WHEN isRed IS NULL THEN 1 ELSE 0 END) +
(CASE WHEN isBlue IS NULL THEN 1 ELSE 0 END) +
(CASE WHEN isYellow IS NULL THEN 1 ELSE 0 END))
AS sumOfNulls FROM productColor) WHERE sumOfNulls<3)
>=1
BEGIN
SELECT RAISE(FAIL, 'More then one color specified');
END;