1

varchar2(4000) 型の列が 1 つあるテーブルがあります。その列には、正規表現を使用してテーブル名を取得したいクエリが含まれています。

元:

 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 列から別のテーブルにテーブル名を取得するにはどうすればよいですか?

4

2 に答える 2

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
于 2013-02-04T22:03:27.993 に答える
0

これは、そのままの Oracle SQL では実行できません。動的なテーブル名または列名を使用することはできません。PL/SQL および動的 SQLを使用する必要があります。

于 2013-02-05T01:54:42.637 に答える