У меня есть таблица Users, каждый пользователь имеет идентификатор, имя и некоторые другие поля. мне нужно проверить, есть ли другой пользователь с тем же именем, после установки или обновления, так что я сделал этот триггер:Проверка наличия у каждого объекта таблицы другого имени
CREATE OR REPLACE TRIGGER user_name
BEFORE
INSERT OR UPDATE
ON Users
FOR EACH ROW
DECLARE
count INTEGER;
BEGIN
SELECT COUNT(*) INTO count FROM Users WHERE name = :new.name AND idUser <> :new.idUser;
IF count > 0
THEN raise_application_error(-20007, 'There is already another user with the same name');
END IF;
END;
Это, кажется, работает при установке новых пользователей, но это не делает, когда я обновляю их , похоже, что он «игнорирует» проверку idUser, поэтому он всегда терпит неудачу, поскольку находит одного и того же пользователя с тем же именем. Почему это происходит? Спасибо
Почему вы не используете ограничение 'unique'? – Mat
'создать уникальный индекс uk_user_name для пользователей (имя);' для решения всех ваших проблем –
Да, он работает с уникальным ограничением/индексом, но я хотел бы знать, почему он не работает таким образом. – JulioAGM