应该是一个简单的:-)
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
查找单词 '表' ,它可以跟着 被一个数字或字符串像1,2,名字等
- 要找到所有这样的字,我用
connect by level
技术,但它 给出了不同行中的输出。
- 最后,把它们放在一行中作为逗号分隔值,我使用 使用
LISTAGG
。
- 哦,是的,那q'[]'是字符串文字技术。
这个字符串来自哪里?什么是上下文?你有什么尝试? – Toto 2014-09-11 11:05:03
是的,我试过了,用t作为 (SELECT'select fro_date,date_frm,col3 from emp,sampletable(select deptno,dname from dept where dname = mn)where deptno = 10'a FROM DUAL), trans 选择REGEXP_REPLACE(replace(replace(TRANSLATE(UPPER(a),CHR(10)|| CHR(11)|| CHR(13),''),'FROM','FROM#'),'WHERE',' (#)(。*)(*)(''''),'''''','''''''') #+)') 当trans如'%FROM%'且转译不像'%WHERE%'时,则REGEXP_SUBSTR(trans,'(#)(。*)')结束REGEXP_SUBSTR from trans res#EMP,SAMPLETABLE #DEPT#WHERE DNAME = MN)# – user4030390 2014-09-11 12:47:31