oracle sql正则表达式检索表名

时间:2013-01-26 04:40:18

标签: sql regex oracle

我有一个表有一列varchar2(4000)的表。该列包含我想通过使用正则表达式检索表名的查询。

EX:

 create table sam ( query_1 varchar2(4000)); 

数据是:

insert into sam values(
'select ename e, empno d , sal f,dname from emp e, dept d where e.deptno=d.deptno');
insert into sam values(
'SELECT B.DN,  A.DN , C.BN FROM A.DoG,   b.caT,  C.rAt')

如何从query_1列中检索表名到另一个表?

2 个答案:

答案 0 :(得分:0)

这将完成单行的工作,但在选择多行时无法正常工作。也许比我更熟练的人可以改善这一点:

select
  regexp_substr(c.split, '\S+') as table_name
from (
  select 
    regexp_substr(b.match, '[^,]+', 1, rownum) as split 
  from (
    select
      regexp_replace(regexp_substr(query_1, 'from.+?(where|group|order|$)', 1, 1, 'i'), '(from|where|group|order)', '', 1, 0, 'i') as match
    from
     sam
  )b
   connect by level <= length (regexp_replace (b.match, '[^,]+'))  + 1
) c

答案 1 :(得分:0)

您不能在直接的Oracle SQL中执行此操作。您不能拥有动态表或列名称。您需要使用PL / SQL和Dynamic SQL