database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40467 게시물 읽기
No. 40467
9i에서 REGEXP_REPLACE 사용할수 있는 방법 없나요?
작성자
새터니(saturn77)
작성일
2014-05-22 10:47ⓒ
2014-05-22 10:47ⓜ
조회수
8,499
 
 
개발DB에서 작업만 하다보니 리얼DB의 버젼이 낮은것을 잊고 있었습니다.
 
마농님의 도움으로 작업일정을 잡고 준비중에 복병을 만났네요..
 
ORACLE 9i에서 REGEXP_REPLACE를 지원하지 않는 것으로 알고 있습니다.
 
다른 방법이나, 대체 함수혹은, 저 펑션을 추가할수는 없을까요?
 
-----샘플 DB--------
 
WITH T 
AS
(
SELECT  /*+PARALLEL(A 4) FULL(A)*/12345678 AS CUST_ID
      , '텍스트텍스트 123456 1234567,계좌번호041-041512-01-511,123ABCi텍스트 텍스트 텍스트' AS BIGO
   FROM  DUAL A
)
SELECT cust_id
     , bigo
     , REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(bigo
       -- 1. 주민번호 패턴 --
       , '(^|[^0-9])([0-9]{6}-[0-9]{7})($|[^0-9])', '\1******-*******\3')
       -- 2. 주민번호 패턴 --
       , '(^|[^0-9])([0-9]{6} [0-9]{7})($|[^0-9])', '\1******-*******\3')
       -- 3. 계죄번호 패턴 --
       , '(^|[^0-9])([0-9]{3}-[0-9]{4}-[0-9]{6})($|[^0-9])', '\1***-****-******\3')
       -- 4. 계죄번호 패턴2 --
       , '(^|[^0-9])([0-9]{3}-[0-9]{6}-[0-9]{2}-[0-9]{3})($|[^0-9])', '\1***-****-******\3')
       AS result
  FROM t
;
 
이 글에 대한 댓글이 총 1건 있습니다.

 create or replace

아래 펑션을 추가 하여도 제대로 된 결과는 나오지 않네요...ㅠㅠ  FUNCTION regexp_replace (
source_char IN VARCHAR2
, pattern IN VARCHAR2
, replace_string IN VARCHAR2
, POSITION IN PLS_INTEGER DEFAULT 1
, occurrence IN PLS_INTEGER DEFAULT 0
, match_parameter IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2 AS
/*************************************************************************
* Program : regexp_replace
* Version : 1.0
* Author : Philip Moore
* Date : 20-JUN-2009 Anno Domini
* Purpopse : This provides a pseudo "REGEXP_REPLACE" function for Oracle 9iR2
* Warnings : Do NOT compile in an Oracle 10GR2 database (or above)!
*************************************************************************/
-- Variables
l_source_string VARCHAR2 (32767);
l_temp_string VARCHAR2 (32767);
l_flags VARCHAR2 (10);
l_occurrence PLS_INTEGER;
l_end_of_pattern_pos PLS_INTEGER;
l_string_pos PLS_INTEGER;
BEGIN
-- Substr the source_char to start at the position specified
l_source_string := SUBSTR (source_char, POSITION);

-- Set up the flags argument
IF occurrence = 0 THEN
l_flags := 'g';
ELSE
l_flags := NULL;
END IF;

l_flags := l_flags || match_parameter;

-- Now replace the regular expression pattern globally if "g"
IF INSTR (l_flags, 'g') > 0 THEN
owa_pattern.CHANGE (line => l_source_string
, from_str => pattern
, to_str => replace_string
, flags => l_flags);
-- Not a global replace - loop until the "occurrence"th occurrence is replaced...
ELSE
l_string_pos := 0;
l_occurrence := 0;
WHILE l_string_pos < LENGTH (l_source_string) AND l_occurrence < occurrence LOOP
l_string_pos := l_string_pos + 1;

l_end_of_pattern_pos := owa_pattern.amatch (line => l_source_string
, from_loc => l_string_pos
, pat => pattern
, flags => match_parameter);

IF l_end_of_pattern_pos != 0 THEN
l_occurrence := l_occurrence + 1;
END IF;
END LOOP;

IF l_occurrence = occurrence THEN
l_temp_string := SUBSTR (l_source_string
, l_string_pos
, (l_end_of_pattern_pos - l_string_pos));
owa_pattern.CHANGE (line => l_temp_string
, from_str => pattern
, to_str => replace_string
, flags => l_flags);
l_source_string := SUBSTR (l_source_string
, 1
, l_string_pos - 1) || l_temp_string || SUBSTR (l_source_string, l_end_of_pattern_pos);
END IF;
END IF;

-- Piece the string back together if needed...
IF POSITION > 1 THEN
l_source_string := SUBSTR (source_char
, 1
, (POSITION - 1)) || l_source_string;
END IF;

RETURN l_source_string;
END regexp_replace;
/
새터니(saturn77)님이 2014-05-22 10:58에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40471숫자 or 문자 비교하여 같은 값이면 count 제외처리 [2]
정상기
2014-05-23
7312
40470VIEW에서 connect by 사용법
초보
2014-05-22
6767
40469오라클 SQL 또는 PL/SQL 질문입니다..몇일째 고생중.. [2]
월화수목금금금
2014-05-22
6818
404679i에서 REGEXP_REPLACE 사용할수 있는 방법 없나요? [1]
새터니
2014-05-22
8499
40466demo_proc.mk 파일 생성 또는 위치 문의
하정민
2014-05-21
6975
40465랜덤하게 배치해야하는 문제입니다. 마농님 도와주세요... [2]
도끼발
2014-05-21
7424
40464오라클 에러 로그(ora-04063)
디비초보
2014-05-20
8364
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.042초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다