복붙노트

[SQL] 오라클 11g - 정규식 체크 제약 조건

SQL

오라클 11g - 정규식 체크 제약 조건

나는 오라클 11g를 사용하고 테이블이 생성에 제약 조건을 정의 만들려고 해요.

나는 (... 등 전자 우편 주소, 전화 번호 등) 몇 가지 정보를 확인하기 위해 점검 제한 조건을 추가하려고했다

내가 이런 일을 할 수 있도록 할 오라클 11g에서 뭔가인가?

constraint CK_CONSTRAINT_NAME check (EMAIL like '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})$

나는 오라클 11g는 (내가 틀렸다면 정정 해줘) 정규식이 형식을 지원하지 않습니다 생각 ...

나는 REGEX_LIKE를 사용하는 방법을 본 적이 있지만, WHERE 절에서만 작동하는 것 같다.

나는 점검 제한 조건이 아닌 트리거 또는 외부 함수 / 스크립트로 유지하고 싶습니다.

또한, 나는 여기에 다른 스레드에서 읽은 '정규식을 말하는 사람이 전자 메일 주소 형식과 같은 정보를 확인하는 좋은 방법이 아니다. 이유가 주석에 주어진하지 않았다, 나는 이유가, 경우 이유를 알고 싶습니다!

해결법

  1. ==============================

    1.점검 제한 조건은 WHERE 절 조건과 동일한 구문 규칙을 따릅니다 :

    점검 제한 조건은 WHERE 절 조건과 동일한 구문 규칙을 따릅니다 :

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

    설명서에서 자세한 내용 :

    편집하다:

    당신이 실제로 점검 제한 조건에서 사용할 수있는 것에 그러나 몇 가지 제한이 있습니다 :

  2. ==============================

    2.

    CREATE TABLE MYTABLE(
      EMAIL VARCHAR2(30) CHECK(REGEXP_LIKE (EMAIL,'^[A-Za-z]+[A-Za-z0-9.]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$'))
    );
    
    ALTER TABLE MYTABLE ADD(CONTACT NUMBER(10) CHECK(REGEXP_LIKE(CONTACT,'[0-9]{10}')));
    
    
    Explanation of Regular Expression
    ^           #start of the line
      [_A-Za-z0-9-]+    #  must start with string in the bracket [ ], must contains one or more (+)
      (         #  start of group #1
        \\.[_A-Za-z0-9-]+   #     follow by a dot "." and string in the bracket [ ], must contains one or more (+)
      )*            #  end of group #1, this group is optional (*)
        @           #     must contains a "@" symbol
         [A-Za-z0-9]+       #        follow by string in the bracket [ ], must contains one or more (+)
          (         #      start of group #2 - first level TLD checking
           \\.[A-Za-z0-9]+  #        follow by a dot "." and string in the bracket [ ], must contains one or more (+)
          )*        #      end of group #2, this group is optional (*)
          (         #      start of group #3 - second level TLD checking
           \\.[A-Za-z]{2,}  #        follow by a dot "." and string in the bracket [ ], with minimum length of 2
          )         #      end of group #3
    $           #end of the line
    
  3. from https://stackoverflow.com/questions/7621568/oracle-11g-check-constraint-with-regex by cc-by-sa and MIT license