Oracle 11g - Проверить ограничение с помощью RegEx - PullRequest
4 голосов
/ 01 октября 2011

Я использую Oracle 11g и пытаюсь создать таблицу, определяющую ограничения на создание.

Я пытался добавить проверочное ограничение для проверки некоторой информации (например, адреса электронной почты, номера телефона и т. Д.)...)

Есть ли в Oracle 11g что-то, что позволило бы мне сделать что-то подобное?

constraint CK_CONSTRAINT_NAME check (EMAIL like 'REGEX')

RegEx, который я хотел использовать (взято из regexLib):

^[a-zA-Z][a-zA-Z0-9_\.\-]+@([a-zA-Z0-9-]{2,}\.)+([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})$

Я думаю, что Oracle 11g (поправьте меня, если я ошибаюсь) не поддерживает этот формат для RegEx ...

Я видел методы, использующие REGEX_LIKE, но, похоже, толькоработать в WHERE предложениях.

Я бы хотел оставить его в качестве проверочного ограничения, а не триггера или внешней функции / скрипта.

Кроме того, я читал в других темахздесь, кто-то говорит, что RegEx 'не хороший способ проверки формата адреса электронной почты и такой информации.В комментарии не указана причина, и я хотел бы знать почему, если причина есть!

1 Ответ

13 голосов
/ 01 октября 2011

Проверочное ограничение следует тем же правилам синтаксиса, что и условия для предложения WHERE:

alter table foo
  add constraint check_email 
  check (REGEXP_LIKE(email,'your_regex_goes_here','I')); 

Подробнее в руководстве:

Редактировать:

Однако существуют некоторые ограничения на то, что вы действительно можете использовать в проверочном ограничении:

...