반응형
Oracle 11g - RegEx로 제약 조건 확인
저는 오라클 11g을 사용하고 있는데, 테이블을 만들려고 하는데 생성에 대한 제약 조건을 정의합니다.
일부 정보(이메일 주소, 전화번호 등)의 유효성을 확인하기 위해 검사 제약 조건을 추가하려고 했습니다.
오라클 11g에 이와 같은 작업을 할 수 있는 것이 있습니까?
constraint CK_CONSTRAINT_NAME check (EMAIL like 'REGEX')
regexLib에서 가져온 regEx는 다음과 같습니다.
^[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'라고 말하는 것은 이메일 주소 형식과 그런 정보를 확인하는 좋은 방법이 아닙니다.댓글에 이유가 제시되지 않았고, 이유가 있다면 알고 싶습니다!
검사 제약 조건은 WHERE 절의 조건과 동일한 구문 규칙을 따릅니다.
alter table foo
add constraint check_email
check (REGEXP_LIKE(email,'your_regex_goes_here','I'));
설명서의 자세한 내용:
- Oracle 11 - http://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions007.htm#SQLRF52141 의 경우
- Oracle 12용 - https://docs.oracle.com/database/121/SQLRF/conditions007.htm#SQLRF52141
편집:
그러나 검사 제약 조건에서 실제로 사용할 수 있는 것에는 몇 가지 제한이 있습니다.
- Oracle 11 - http://docs.oracle.com/cd/E11882_01/server.112/e41084/clauses002.htm#SQLRF52205
- Oracle 12 - https://docs.oracle.com/database/121/SQLRF/clauses002.htm#SQLRF52205
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
언급URL : https://stackoverflow.com/questions/7621568/oracle-11g-check-constraint-with-regex
반응형
'programing' 카테고리의 다른 글
HTTP GET 요청에 탭별 데이터 바인딩 (0) | 2023.09.18 |
---|---|
웹 앱에 대한 사용자 지정 마우스 오른쪽 단추 클릭 상황에 맞는 메뉴 만들기 (0) | 2023.09.18 |
MariaDB Active Directory 인증확인 (0) | 2023.09.18 |
현재 사용자가 읽기 권한을 가진 테이블 목록을 가져오는 Oracle 쿼리 (0) | 2023.09.18 |
시스템 가동 시간을 얻으려면 어떤 API를 호출해야 합니까? (0) | 2023.09.18 |