포스트

오라클 정규표현식으로 쿼리문장 편집

문제

데이터 이관을 하다보면 여러 테이블 혹은 거기에서 파생되는 SQL을 일괄적으로 편집할 필요가 있다
이번엔 로컬에서 테스트한 데이터 이행 쿼리에 DBLINK를 붙여야 했던 과거 기록

원인

늘 계획은 바뀌는 법이니까

해결

WITH T AS
(
SELECT '(SELECT A.NAME , B.COMP FROM TXT_FFT.TABLE_A A, FAT.TABLE_B B WHERE A.KEY = B.KEY)' TXT FROM DUAL 
-- 변경이 필요한 대상 쿼리, 예제 용으로 이리 적었지만, 이미 많이 작성된 쿼리에서 테이블명에 DBLINK명을 붙이는 작업이다
)
SELECT REGEXP_REPLACE(TXT,'(TXT_\S*\.)([^ ]+)','\1\2@DBLINK')   /*
FROM T
  • (TXT_\S.) : TXT_로 시작하고 \S 아무 대문자 단어를 만나서 . 으로 끝나는 문자열을 버퍼 1에 저장한다
  • ([^ ]+) : 공백을 제외한 모든 문자를 버퍼 2에 저장한다
  • Replace 할 대상문자 전체를 ‘\1\2@DBLINK’ : 버퍼1 을 붙여넣고 버퍼2를 붙여넣고 @DBLINK 를 추가하여 대체한다

이렇게 하면 특정 문자열 패턴만 원하는데로 변경이 가능하다

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.