он не устанавливает нижний регистр 'y' как верхний регистр 'y' ...
Вы не сказали это.Ваш уникальный индекс допускает не более одного значения 'y'
или 'Y'
, но индексы не изменяют данные, поступающие в таблицу.Для этого вам нужно использовать триггер, например:
CREATE OR REPLACE TRIGGER biu_myTestTab_active_uc
BEFORE INSERT OR UPDATE ON myTestTab
FOR EACH ROW
BEGIN
:new.active := UPPER(:new.active);
END;
/
... он принимает любой другой символ, если он уникален
На самом деле он принимает любой другой персонаж, независимо от того, является ли он уникальным.Вы можете вставить 'X'
пять раз, если хотите, и индекс не остановит вас.Опять же, это не то, что индекс, который вы определили, может сделать.Как уже упоминалось в вашем вопросе, вам нужно проверить ограничение:
ALTER TABLE myTestTab ADD CONSTRAINT active_yes_or_null CHECK (active = 'Y' OR active IS NULL);