by chrome [SQL Query] 정규표현식 REGEXP_REPLACE [2017.03.29 17:03:32]
http://www.gurubee.net/article/69313
해당 게시물 질문을 통하여
'(SELECT A.NAME , B.COMP FROM TXT_FFT.TABLE_A A, FAT.TABLE_B B WHERE A.KEY = B.KEY)'
의 내용중 TXT_ 로 시작하는 테이블 이름뒤에 @DBLINK 를 하여 @DBLINK를 추가하는 방법을
알 수 있었습니다!
헌데...
TXT_로 시작하는 테이블 이름 뒤에 @DBLINK를 붙이면서 TXT_ 로 시작하는 부분은 지워줘야합니다 ㅜㅜ
멘TO THE 붕... TXT_ 가 혹시 중복이 있을지도 몰라서 REGEXP_REPLACE한 결과에 대해 무턱대고 지울 수도 없고 (OWNER에서만 지워야 하고, 테이블명에선 지우면 안됩니다)
(SELECT A.NAME , B.COMP FROM FFT.TABLE_A@DBLINK A, FAT.TABLE_B B WHERE A.KEY = B.KEY)
이렇게 되어야한다는것이죠.
REGEXP_REPLACE 중에 나온 인수 \1 에 대해 REPLACE작업을 시도해보았으나
실패! 실패패패패패! 털썩.. 난 아마 안될꺼야.
첫번째 괄호가 \1 을 의미합니다. 괄호 위치만 살짝 바꿔주세요.
- 변경전 : REGEXP_REPLACE(txt, '(txt_[^ ]+\.[^ ]+)', '\1@DBLINK', 1, 1, 'i')
- 변경후 : REGEXP_REPLACE(txt, 'txt_([^ ]+\.[^ ]+)', '\1@DBLINK', 1, 1, 'i')
다시 생각해 보니 txt_ 앞에 공백이 있어야 정확할 것 같네요.
- 공백추가 : REGEXP_REPLACE(txt, ' txt_([^ ]+\.[^ ]+)', ' \1@DBLINK', 1, 1, 'i') -- 수정
오 신통방통하네요. ㅋㅋㅋ
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 ) select REGEXP_REPLACE(txt, ' txt_([^ ]+\.[^ ]+)', ' \1@DBLINK', 1, 1, 'i') FROM T ;
(SELECT A.NAME , B.COMP FROM FFT.TABLE_A@DBLINK A, FAT.TABLE_B B WHERE A.KEY = B.KEY)
\1 전에 공백하나를 추가해서 잘나옵니다.
참고로 전
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 ) select REGEXP_REPLACE(txt, '(txt_[^ ]+\.[^ ]+)', SUBSTR('\1@DBLINK',DECODE(INSTR('\1@DBLINK','TXT_'),0,0,INSTR('\1@DBLINK','TXT_')+3)), 1, 1, 'i') FROM T ;
이런 뻘짓을 하는 중이였습니다...뭔가 나오긴 하는데 미심쩍은
고맙습니다. 꾸벅