繁体   English   中英

在 Oracle 中动态显示查询 output 的第一个数据行中表的列名

[英]Show column names of the table in 1st data row of the query output dynamically in Oracle

有一张表,让我们说VW_RESULT如下所示:

ID Quarter Risk
00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

现在我必须在第一行显示列名。

我想要这样的 output :

Col1 Col2 Col3
ID Quarter Risk
00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

如果列数是固定的,我可以很容易地实现这一点,使用UNION ALL

但列数会不时变化。

我想让这个动态,这样我就不必手动输入列名。

我正在使用Oracle 11g

将您的列放入变量中并连接您在每次运行时获得的所有列..用执行立即执行您的并将您的变量与语句连接起来

为了满足您的要求,您的所有数据类型都应该是字符串,因为所有列都是字符串。 如果您的任何数据类型不是字符串,它将不起作用。 例如:ID 列似乎是 integer 数据类型,如果您尝试根据 SQL 标准将“ID”字符串合并到 ID 列中,它将失败。 但是,如果相应表中的所有列都是字符串格式,则以下是解决方案。

declare 

v_Sql1 varchar(1000);
v_Sql2 varchar(1000);

begin

select  (LISTAGG(chr(39)||column_name||chr(39), ',') WITHIN GROUP (ORDER BY 
column_id)) into v_Sql1 from cols where table_name = 'VW_RESULT'; 

v_Sql2:= 'select * from
(select  column_name from cols where table_name = ''VW_RESULT'') 
pivot
(
max(column_name)
for column_name in (' || v_Sql1 || '))
union select * from VW_RESULT'; 

dbms_output.put_line(v_Sql1);
dbms_output.put_line(v_Sql2);

execute immediate v_Sql2;

end;
/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM