Oracle Unique Constraint - смешанный регистр - PullRequest
3 голосов
/ 28 февраля 2012

У меня есть таблица Oracle со следующими столбцами:

ID
FUNCTION_ID
FUNCTION_ROLE

Столбец идентификатора уникален (последовательность), но я также хочу, чтобы обе комбинации (FUNCTION_ID, FUNCTION_ROLE) также были уникальными.

Мой запрос, тем не менее, так как FUNCTION_ROLE является строкой, а значение может быть в смешанном регистре, что является лучшим подходом для предотвращения этого, то есть:

Data for this table:
Row 1: 1,1,TEST1
Row 2: 2,1,Test1

Я ожидал бы получитьуникальное нарушение ограничения при попытке вставить строку 2, так как 'Test1' совпадает с 'TEST1' - только случай отличается.

Как я могу предотвратить это, как я думал, создавая еще один столбец с именем FUNCTION_ROLE_UPPERи использование этого столбца вместе с FUNCTION_ID для проверки уникальности - будет ли это правильным подходом?

Спасибо.

1 Ответ

10 голосов
/ 28 февраля 2012

Этого можно добиться, используя индекс на основе функций:

CREATE UNIQUE INDEX YOUR_TABLE_U1 ON YOUR_TABLE(FUNCTION_ID, UPPER(FUNCTION_ROLE))

В Oracle 11 вы также можете поместить UPPER(FUNCTION_ROLE) в виртуальный столбец.

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