應該是一個簡單的:-)
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