我有多个表,其中包含不同数量的列,其名称以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语句,然后执行这些语句以返回我想要的行。
答案 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;
/