从所有具有以“ TEST”开头的列的表中选择行和列

时间:2019-05-29 01:00:17

标签: sql oracle

我有多个表,其中包含不同数量的列,其名称以TEST开头:

以下是我想看看是否要执行代码的示例:

TEST2UFLG TEST3UFLG TEST4UFLG TEST5UFLG TEST6UFLG 
--------- --------- --------- --------- ---------
0         1         0         1         0
... (rows elided)
0         1         0         1         0

这是我所拥有的查询,它返回元数据,我将使用这些元数据来为包含此类列的每个表构造一个查询。

select
  ( 
    select
      to_char(wm_concat(column_name)) 
    from
      dba_tab_columns 
    where
      owner = 'XXX' 
      and table_name = 'TBLXXXX' 
      and column_name like '%TEST%'
  )
from
  XXX.TBLXXXX

我不知道如何编写代码,该代码将使用这些数据来生成一个或多个select语句,然后执行这些语句以返回我想要的行。

1 个答案:

答案 0 :(得分:2)

一种选择是创建动态视图

DECLARE
     v_select   CLOB;
BEGIN
     SELECT
          'SELECT '||LISTAGG(column_name,',')  
              WITHIN GROUP (ORDER BY column_id) ||' FROM ' || table_name
         INTO v_select
     FROM all_tab_columns 
        where owner = 'XXX' 
         and table_name = 'TBLXXXX' 
      and column_name like '%TEST%'
      group by table_name;
     IF
          v_select IS NOT NULL
     THEN
          EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW v_testtbl as ' || v_select;
     END IF;
END;
/

this answer