我打算制作一个通用代码,用于使用控制表从表中选择列。
我的控制表:
SEQ Table_Name Column_name
1 X X1
1 X X2
1 X X3
2 Y Y1
2 Y Y2
2 Y Y3
2 Y Y4
3 Z Z1
3 Z Z2
需要帮助实现以下样本:
示例动态查询:
Select Y1,Y2,Y3,Y4 from Y;
如果我想将控制表中的表名称设置为动态,如下所示。
Select X1,x2,X3 from x
Union
Select y1,y2,y3,y4 from y
Union
Select z1,z2 from z.
如果我添加更多表,则应该进行联合查询
答案 0 :(得分:1)
您可以LISTAGG
使用seq, table_name
分组{/ 1}}。
SELECT 'select '
||Listagg(column_name, ',')
within GROUP ( ORDER BY seq )
||' FROM '
|| table_name query
FROM control_table
GROUP BY seq,
table_name;
<强> O / P:强>
QUERY
-----
select X1,X2,X3 FROM X
select Y1,Y2,Y3,Y4 FROM Y
select Z1,Z2 FROM Z
修改强>
如果我想让控制表中的表名像动态一样 下面,请建议。
您可以使用其他LISTAGG
。但我建议不要这样做,因为查询不应超过4000个字符。尝试编写PL/SQL
程序来附加它。我已经给了你这个主意吗?
WITH tabs
AS (SELECT 'select '
||Listagg(column_name, ',')
within GROUP ( ORDER BY seq )
||' FROM '
|| table_name query
FROM control_table
GROUP BY seq,
table_name)
SELECT Listagg(query, ' UNION ')
within GROUP ( ORDER BY ROWNUM ) final_query
FROM tabs;