Создать уникальное ограничение с nvl в Oracle - PullRequest
1 голос
/ 16 июня 2011

Как я могу создать уникальное ограничение, когда мне нужно обработать нулевые значения как равные.

Для

изменить таблицу T1 добавить ограничение T1_UN уникально (nvl (C1, ''))

я получаю

 ORA-00904: : invalid identifier

баллов по nvl

Спасибо!

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

NOT NULL кажется лучшей идеей, но вы можете сделать индекс на основе функций уникальным:

 create unique index idx_t1 on t1 (nvl(C1, ' '));
1 голос
/ 16 июня 2011

Просто сделайте столбец NOT NULL.

Природа NULL заключается в том, что она никогда не равна чему-либо. Следовательно, каждое значение NULL в вашем столбце уже имеет значение UNIQUE. Не имеет смысла включать их в UNIQUE ключ, как вы хотите. Причина, по которой вы хотите это сделать, вероятно, заключается в существующей проблеме целостности данных. Таким образом, чтобы сделать столбец NOT NULL, вам, возможно, придется перенести значения NULL в другое место, сначала ...

Примечание. Вы можете создать столбец просто UNIQUE. Тогда вы можете иметь несколько значений NULL, как описано выше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...