간단한 일 :-)에게이어야한다
SQL> WITH DATA AS(
2 select q'[select b.col1,a.col2,lower(a.col3) from table1 a inner join table2 b on
3 a.col = b.col and a.col = b.col inner join (select col1, col2, col3,col4 from tablename)
4 c on a.col1=b.col2 where a.col = 'value']' str
5 FROM DUAL)
6 SELECT LISTAGG(TABLE_NAMES, ' , ') WITHIN GROUP (
7 ORDER BY val) table_names
8 FROM
9 (SELECT 1 val,
10 regexp_substr(str,'table[[:alnum:]]+',1,level) table_names
11 FROM DATA
12 CONNECT BY level <= regexp_count(str,'table')
13 )
14/
TABLE_NAMES
--------------------------------------------------------------------------------
table1 , table2 , tablename
SQL>
간략한 설명은, 그 OP 있도록 /도 다른 사람들이 찾을 수있는 것이 유용 :
REGEXP_SUBSTR
단어 '테이블'을 찾습니다 그것은 과 같은 수 또는 문자열로 따라갈 수 있습니다.
- 모든 단어를 찾으려면
connect by level
기술을 사용했지만을 사용했습니다.은 다른 행의 출력을 제공합니다.
- 마지막으로 쉼표로 구분 된 값으로 단일 행에 넣으려는 경우 I 은
LISTAGG
입니다.
- 오 예, 그 q '[]'는 문자열 리터럴 기법입니다.
이 문자열의 출처는 어디입니까? 문맥은 무엇입니까? 너 뭐 해봤 니? – Toto
예 (예 : 'select fro_date, date_frm, col3 from empt, select from deptno, dname = mn) 여기서 deptno = 10'은 FROM DUAL이고, 은 CHR (11) || CHR (13), ''), 'FROM', 'FROM #'), 'WHERE', ' TRUE from t) '% WHERE %'와 같은 trans 일 때을 선택하면 REGEXP_SUBSTR (trans, '(#) (. *) (*)', '*', 'FROM' (예 : #)) '% FROM %'와 같은 트랜스와 '% WHERE %'와 같은 트랜스가 아닌 경우 REGEXP_SUBSTR (트랜스, '(#) (. *)') 끝 REGEXP_SUBSTR 트랜스에서 # EMP, SAMPLETABLE # DEPT # WHERE DNAME = MN) # – user4030390